解释为什么2012年12月31日是第53周而不是第1周(ISO-8601)

wub*_*bbe 5 javascript date week-number

我正在尝试在JavaScript中编写一个函数来返回给定日期的周数,并且我正在针对我在网络上找到的两个函数测试我的代码,即

http://techblog.procurios.nl/k/n618/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html
http://www.epoch-calendar.com/support/getting_iso_week.html
Run Code Online (Sandbox Code Playgroud)

我从1970年1月1日开始测试了30,000天,我和第二个来源有一些不同.第一种差异是某些情况下该来源返回零周的情况,这显然是错误的.然后对于其他一些情况,它返回第53周,我的函数返回第1周.这些是日期

  • 1984年12月31日
  • 2012年12月31日
  • 2040年12月31日

他们都看起来像这样

Dec         Jan
29  30  31  01  02  03  04  05  06  07  08  09  10
Sa  Su  Mo  Tu  We  Th  Fr  Sa  Su  Mo  Tu  We  Th
        ^^                          ^^
Run Code Online (Sandbox Code Playgroud)

根据ISO-8601

  • 周从星期一开始
  • 一年中的第一周是该年第一个星期四的一周

1月3日是2013年的第一个星期四,因此1月3日是第1周(2013年)的一天.第1周(2013年)的开始是在星期四之前的星期一,即2012年12月31日.

因此,2012年12月31日必须是第1周.

然而...

  • 当我在Wolfram Alpha中键入"2012年12月31日的哪一周"时,它将返回第53周
  • 当我在excel中键入'= WEEKNUM("2012-12-31")'时,它也返回第53周

我错过了什么吗?困扰我的是,它只发生在如此少的日期(70年或更长时间内的3个日期)

Mar*_*eed 4

并非所有东西都使用 ISO 8601;“周数”有许多不同的定义。您的解释是正确的 - 2012 年 12 月 31 日确实是 ISO 2013 年第一周的开始。

在Linux上使用GNU的date(1)命令的演示:

$ date +%GW%V -d '2012-12-31'
2013W01
Run Code Online (Sandbox Code Playgroud)

如果要在 Excel 中使用 ISO 定义,则必须指定返回类型 21

=WEEKNUM("2012-12-31",21)
Run Code Online (Sandbox Code Playgroud)

产量 1。

  • 查了我们的团队日历,上面写着 2013 年第 1 周(德国的)。马克:所有美国软件在日期计算和本地化方面都值得怀疑,因为大多数美国人无法想象自己大陆之外的东西。Excel 2003 版本之前无法正常处理周计算。和 ,在德国的 CSV 文件中,甚至在 2010 版本中,无需在设置中进行修改。 (2认同)