2016-10-21 29 views
1

如果我有以下日期:2015-23,格式爲%Y-%W,即2015年第23周(2015年6月1日 - 2015年6月7日)。d3返回錯誤的星期開始

當我使用D3中的格式方法返回該周的日期:

var cameron = d3.time.format('%Y-%W').parse;

cameron('2015-23');

它返回Mon Jun 08 2015 00:00:00 GMT+0100 (BST)

但我應該得到:Mon Jun 01 2015 00:00:00 GMT+0100 (BST)

根據文檔:https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md%W應該是week number of the year (Monday as the first day of the week) as a decimal number [00,53].但它反而會提前一週!

回答

2

這是預期的結果。根據Mike Bostock:

d3-time-format使用的%W指令不是ISO星期日期;它是[00,53]中的基於零的週一。這意味着任何給定年份的第一個星期一總是1號;在同一年這個第一個星期一之前的任何日期爲0

通過「ISO週日期」,他表示這(ISO 8061):https://en.wikipedia.org/wiki/ISO_week_date

所以,還是根據他:

  • 2015-00是星期一,12月29日,2014年
  • 2015-01是星期一,1月5日,2015年
  • 2015-52和2016-00是星期一,12月28日,2015年
  • 2015-53和2016-01是2016年1月4日,星期一。
+0

我無法控制回來的星期幾......所以有什麼解決方案?從解析之前的星期編號只需要subrtact 1? – Cameron

+0

您可以這樣做,或者使用其他庫/方法來獲取ISO周。 –

相關問題