两个日期之间的 C# 时间段(以周为单位)


C# Time Period in weeks between 2 dates

我有一个网络应用程序,用户将在其中输入 2 个日期。一个 StartDate 和一个 EndDate。现在我想编写它,以便选择StartDateEndDate以确定有多少周,然后显示这些周的日期,例如,如果用户选择01-11-2018作为StartDate和 31-12-2018 作为 EndDate 然后我想显示以下内容并记住周仅供参考,以了解它的外观:

  • 第 98 周:2018 年 11 月 1 日 - 2018 年 11 月 3 日
  • 第 99 周:2018 年 11 月 4 日 - 2018 年 11 月 10 日
  • 第 100 周:2018 年 11 月 11 日 - 2018 年 11 月 17 日
  • 使用上一篇文章,我已经有足够的周数了。

    现在我只想能够显示所有星期中每个星期的开始和结束日期。我尝试使用周创建一个 list,然后使用 Foreach 检查添加的周,但这并不完全正确。我只是在寻找实现这一目标的最有效方法。

    也检查过类似问题的链接是:
    链接1


    我已经制作了这个片段...不确定是否一切都符合规范:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var startDate = new DateTime(2018, 11, 1);
    var endDate = new DateTime(2018, 12, 31);

    int diff = (7 + (startDate.DayOfWeek - DayOfWeek.Monday)) % 7;
    var weekStartDate = startDate.AddDays(-1 * diff).Date;
    var i = 1;
    var weekEndDate = DateTime.MinValue;    
    while(weekEndDate < endDate) {
        weekEndDate = weekStartDate.AddDays(6);
        var shownStartDate = weekStartDate < startDate ? startDate : weekStartDate;
        var shownEndDate = weekEndDate > endDate ? endDate : weekEndDate;
        Console.WriteLine($"Week {i++}: {shownStartDate:dd MMMM yyyy} - {shownEndDate:dd MMMM yyyy}");
        weekStartDate = weekStartDate.AddDays(7);
    }

    这假设您的周是"计数",从开始日期所在的那一周开始,并使用星期一作为一周的第一天,星期天作为最后一天(您看到的范围是星期一 - 星期日,除了第一周/最后一周,如果不是星期一或星期日,则使用开始/结束日期)

    你可以在这里在线运行它:https://dotnetfiddle.net/jJ4Ydu

    如果您还需要知道一年中的哪一周,那么这取决于您想要 .NET 样式还是 ISO8601 样式...典型的是后者,您可以使用例如在这个答案上找到的方法,所以它看起来像:https://dotnetfiddle.net/oJscjF

    请注意 2018 年 12 月 31 日(星期一)在 ISO8601 上是 2019 年的第 1 周,而在 .NET 上是第 53 周