我正在尝试在
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
我从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 ^^ ^^
根据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个日期)
解决方法
并非所有产品都使用ISO 8601; “周数”有许多不同的定义.您的解释是正确的 – 2012年12月31日确实是2013年ISO第1周的开始.
在Linux上使用GNU的date(1)命令进行演示:
$date +%GW%V -d '2012-12-31' 2013W01
如果要在Excel中使用ISO定义,you have to specify return type 21:
=WEEKNUM("2012-12-31",21)
收益率1.