C# Time Period in weeks between 2 dates
我有一个网络应用程序,用户将在其中输入 2 个日期。一个 StartDate 和一个 EndDate。现在我想编写它,以便选择StartDate和EndDate以确定有多少周,然后显示这些周的日期,例如,如果用户选择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
- 您是如何获得”第 98 周”的?
-
您想要根据 .NET 还是根据 ISO 8601 的星期日期? 2018 年 11 月 1 日 -> 2018 年 11 月 3 日是一周,第 98 周是怎样的?
-
该数字只是其当前外观的一个示例,但我为此使用了以下代码: Date = StartDate.ToString(“yyyy”)”(Week” DateTimeFormatInfo.CurrentInfo.Calendar.GetWeekOfYear(StartD??ate, CalendarWeekRule.FirstDay , DayOfWeek.Monday)”)
-
@Jcl 我只是以周数为例,在我们公司,我们从第一个星期天到第一个星期日工作,作为第 1 周。
-
@RubenRedman我的问题更多是关于任何大于53的周数都感觉很奇怪的事实
-
看看这里,也许它适合你 stackoverflow.com/questions/662379/…
-
谢谢@Artyom 现在会检查并让你知道。
我已经制作了这个片段…不确定是否一切都符合规范:
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 周
- 这很好用!非常感谢你。这比我的循环效率高得多。
-
我会注意 .NET 样式和 ISO8601 样式,然后检查他们更喜欢哪一个。谢谢。
-
不管周数,这段代码不会显示”1 2 3 4…”吗?
-
@Rafalon 除非您阅读底部注释,是的…我是故意这样做的,因为 OP 在他的输出中显示”第 98 周”,所以我认为这不会是年周(尽管如此,我在底部包括了年周完成,并有两种变体)
-
@Jcl 对,抱歉,我没有看到这个说明。很好的解释:)
-
@Jcl 您的代码段无法按预期工作,例如,在 startDate = 30 Dec 2018 endDate = 20 Jan 2019
-
@弗拉基米尔P。没错,<=应该是<,我改正
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/269551.html