Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date “这是怎么回事?”;周数“;根据日期计算?_Date_Calendar_Week Number - Fatal编程技术网

Date “这是怎么回事?”;周数“;根据日期计算?

Date “这是怎么回事?”;周数“;根据日期计算?,date,calendar,week-number,Date,Calendar,Week Number,对于我正在使用的系统,我需要一个“两周数”,它的工作原理与标准周数一样,它只会每14天滚动一次,而不是每7天滚动一次 换句话说,我在寻找算法,而不是代码,从一个日期计算一周数,以及给定年份和周数的开始/结束日期 问题来自这样一个事实:任何一年的第一周通常不是1月1日,甚至可能是在前一个12月。也有一些年份因为这个而结束了53周 例如: 2009年第一周于2008年12月29日开始 因此,从2009年12月28日到2010年01月03日,2009年有一周的时间#53 2010年第一周于2010年

对于我正在使用的系统,我需要一个“两周数”,它的工作原理与标准周数一样,它只会每14天滚动一次,而不是每7天滚动一次

换句话说,我在寻找算法,而不是代码,从一个日期计算一周数,以及给定年份和周数的开始/结束日期

问题来自这样一个事实:任何一年的第一周通常不是1月1日,甚至可能是在前一个12月。也有一些年份因为这个而结束了53周

例如:

  • 2009年第一周于2008年12月29日开始
  • 因此,从2009年12月28日到2010年01月03日,2009年有一周的时间#53
  • 2010年第一周于2010年1月4日开始
这些数字是如何推导出来的

这些数字是如何推导出来的

好吧,这取决于你使用的是什么系统,但我怀疑你在追求ISO-8601周数,定义如下:

2.2.10日历周数

序号,根据一年中的第一个日历周包括该年的第一个星期四,并且日历年的最后一个日历周是下一个日历年的第一个日历周之前的一周的规则,标识该日历年中的一个日历周

请记住,ISO-8601中的一周从周一开始,周日结束——因此,表达“第一个周四”规则的另一种方式是,一年中的第一周是新年中至少包含四天的第一周


另一个关键点是,当您使用“周-年-周”来表示值时,您也需要使用“周-年”本身,而不是正常年份。因此,对于2010年1月3日星期日,您可以将其表示为“2009年第53周,每周星期日”。很容易使用“错误的年份类型”,并在12月底和1月初左右将值弄乱。

很酷,这很有意义。。。我有点希望它能以某种方式被定义为“一个时代,然后我们继续从那里增加几个星期”。这比我预期的要稳定得多。。。关于如何将这一点延续到“两周数字”中,在那里我可能会在一年中有一个奇怪的开始,有什么想法吗?谢谢@DanielMagliola:不,你需要自己定义这一点——或者更确切地说,问问给你这个任务的人有没有一套具体的要求。两周计算的一个想法是,你必须根据你使用的“日历”来定义不同的两周。在这种情况下,使用“周-年”日历,两周实际上很容易计算。困难在于,它无法清晰地映射到“正常”日历的年边界(因为“正常”日历和“周-年”日历中的年边界不同)