繁体   English   中英

Moment.js-添加天数后出现奇怪的行为

[英]Moment.js - Strange behavior when added days

我试图在10月(2016)的循环中增加1天,但是有一个奇怪的行为。 在10/15/2016抵达时,它不会增加1天,而仅增加23小时。

var date = moment("2016-09-25");
for (var j = 0; j < 42; j++) {
    console.log('before: ' + date.format());
    date = date.clone();
    date.add(1, 'day');
    console.log('after: ' + date.format());
}

安慰:

之后:2016-10-13T00:00:00-03:00

之前:2016-10-13T00:00:00-03:00

之后:2016-10-14T00:00:00-03:00

之前:2016-10-14T00:00:00-03:00

之后:2016-10-15T00:00:00-03:00

之前:2016-10-15T00:00:00-03:00

之后:2016-10-15T23:00:00-03:00

之前:2016-10-15T23:00:00-03:00

之后:2016-10-16T23:00:00-02:00

之前:2016-10-16T23:00:00-02:00

https://jsfiddle.net/7bxqo0m2/

这是因为10月是夏令时生效的时间,因此使您的时间减少了1个小时

请阅读有关moment的构造在这里 ,并期待在moment.utcmoment.parseZone

这里的问题是巴西在午夜节省夏令时,这混淆了“白天”的概念。 Moment试图将日期设置为当前当前时间,其中日期=原始日期+ 1。

问题在于,当它创建一个JS日期为2013-10-20T00:00:00时,基础日期库会感到困惑,因为该时间在巴西不存在。 行为因浏览器而异,但这是Node和Chrome中的行为:

d = moment('2016-10-19').toDate(); //get the native date object
d.setDate(18); //use the native API to set the date
d; // Fri Oct 18 2016 00:00:00 GMT-0300 (BRT), so works fine

//but
d = moment('2016-10-19').toDate(); //get the native date object
d.setDate(20);
d; // Sat Oct 19 2016 23:00:00 GMT-0300 (BRT), WTF?

我更改了endOf()的开始日期并解决了问题

date.endOf('day');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM