[英]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
这是因为10月是夏令时生效的时间,因此使您的时间减少了1个小时
请阅读有关moment
的构造在这里 ,并期待在moment.utc
和moment.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.