片刻问题:isoWeekYear& isoWeek方法行为

时间:2016-01-18 19:48:19

标签: javascript momentjs

  1. 我使用moment的isoWeek函数从日期中获取了iso周。

    时刻(新日期(2015,11,28))。isoWeek()//输出53

  2. 我使用moment的isoWeekYear函数从同一天开始获取iso周年。

    时刻(新日期(2015,11,28))。isoWeekYear()//输出2015

  3. 但是当我将相同的输出提供给力矩函数的输入时,会产生不同的日期。

    moment()。isoWeek(53).isoWeekYear(2015).isoWeekday(0).toDate()//输出2014年12月28日

  4. 对于其他日期,它正常工作。我的代码中是否有任何遗漏,或者是Moment的错误?

    这是一个演示JSFiddle console.log("Iso Week :",moment(new Date(2015,11,28)).isoWeek()); console.log("Iso Year :",moment(new Date(2015,11,28)).isoWeekYear()); console.log("Date :", moment().isoWeek(53).isoWeekYear(2015).isoWeekday(0).toDate());

2 个答案:

答案 0 :(得分:2)

这可能是您给予细分的订单。 这有效:

moment().isoWeekYear(2015).isoWeekday(1).isoWeek(53).toDate());

从Moment.js文档中查看。

  

如果你链接多个动作来构建一个日期,你应该开始   从一年,然后一个月,然后一天等。否则你可能会得到   意外的结果,比如当天= 31而当前月只有30   天(同样适用于本机JavaScript日期操作),   返回日期将是下个月的第1天。

isoWeekDays也是1到7.通过设置0,你将在下周的星期一到来。

答案 1 :(得分:0)

首先你必须了解一件事。在你的第一次操作中,这里发生的是,

moment(new Date(2015,11,28)).isoWeek() //output 53

在使用新的Date()创建日期时,您已经过了11个月。所以会发生什么是创建日期月将增加1.所以日期将是2015-12-28.so周数是53

所以对于第3次操作,你已经传递了相同的结果。所以时刻返回了正确的日期。

在你的情况下,如果你想在第一次操作中通过月减去1。

moment(new Date(2015,10,28)).isoWeek();

现在你会得到正确答案