加上3天后,moment.js格式不正确的年份

时间:2018-12-28 21:49:54

标签: javascript momentjs

在javascript中,我得到了当前时刻,并添加了3天。为什么在添加3天仍是2018时将年份格式化为2019?

从2天11小时到3天10小时的范围内添加时,此操作将失败。但是,如果超出此范围,则可以正常工作。

protocol Message {

}

struct SentMessage: Message {

}

struct ReceivedMessage: Message {

}

var messages: [Message]

Console.log显示以下内容:

2018-12-28 14:39:38 -07:00

2019-12-31 14:39:38 -07:00

1 个答案:

答案 0 :(得分:3)

GGGG是ISO周的年份,而不是实际的年份:

moment.js: Week year, week, and weekday tokens

  

GGGG:ISO 4位数字周年

Wikipedia: ISO week date

  

[...]第01周的ISO 8601定义是其中公历年的第一个星期四的一周。 [...]

     

[...]如果1月1日是星期一,星期二,星期三或星期四,则是在第01周。如果1月1日是星期五,则是上一年的第53周的一部分。如果是星期六,则它是上一年最后一周的一部分,该周的普通年编号为52,a年编号为53。如果在星期日,则它是上一年的第52周的一部分。 [...]

     

[...]如果12月31日是星期一,星期二或星期三,则在第二年的第01周。如果是星期四,则是在该年的第53周刚刚结束;如果在星期五是第52周(如果刚结束的年份是is年则是53);如果是在周六或周日,则是在该年度的第52周刚刚结束。 [...]

因此,一年的最后几天可以属于明年的第一个ISO周。

您正在寻找YYYY

var targ = moment();
console.log(targ.format('YYYY-MM-DD HH:mm:ss Z'));
targ.add(3, 'days');
console.log(targ.format('YYYY-MM-DD HH:mm:ss Z'));