C#时间段(两个日期之间的周数)

时间:2019-01-16 09:50:11

标签: c#

我有一个Web应用程序,用户将在其中输入2个日期。 StartDateEndDate。现在,我要编写它,以便在选择StartDateEndDate时确定有几周,然后显示这些周的日期,例如,如果用户选择01-11-2018作为StartDate和2018年12月31日作为EndDate,那么我想显示以下内容并牢记,本周仅供参考:

  1. 第98周:2018年11月1日至2018年11月3日
  2. 第99周:2018年11月4日至2018年11月10日
  3. 第100周:2018年11月11日至2018年11月17日

通过使用this以前的帖子,我已经有几周的时间了。

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

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

1 个答案:

答案 0 :(得分:3)

我已经制作了此代码段...不确定所有内容是否符合规范:

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样式...典型的是后者,例如,您可以使用this answer上找到的方法,因此它看起来像:https://dotnetfiddle.net/oJscjF

请注意,2018年12月31日(星期一)如何成为ISO8601的2019年第1周,但.NET的第53周