momentjs 中的周计算不正确

Ily*_*lya 2 javascript week-number momentjs

我使用 node.js 和 moment 2.9.0

var moment = require("moment");
var d = moment.utc([2014, 11, 27]);
var iso = d.toISOString();
var week = d.week();
Run Code Online (Sandbox Code Playgroud)

显示 iso = "2014-12-27T00:00:00.000Z" 并且周是 52。

但是如果 var d = moment.utc([2014, 11, 28]);

iso 是 2014-12-28T00:00:00.000Z

周是 1。为什么?

谢谢你。

Mat*_*int 6

答案可以在文档中找到:

一年中的一周取决于哪一天是一周的第一天(星期日、星期一等),哪一周是一年的第一周。

例如,在美国,星期日是一周的第一天。1 月 1 日所在的那一周是一年中的第一周。

因此,2015 年第 1 周(通过此函数)是:

  • 2014-12-28(星期日)
  • 2014-12-29(星期一)
  • 2014-12-30(星期二)
  • 2014-12-31(星期三)
  • 2015-01-01(星期四)
  • 2015-01-02(星期五)
  • 2015-01-03(星期六)

还值得一提的是,moment还具备isoWeek符合ISO 8601周编号系统的功能