我试图在10月(2016年)的一个循环中增加1天但是有一种奇怪的行为。 2016年10月15日抵达时,它不会增加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
答案 0 :(得分:3)
那是因为10月是夏令时生效,从而将你的时间缩短了1小时
请阅读const Component = {init() {}}
const x = Object.create(Component)
const y = Object.create(Component)
console.log(x.init === y.init) //true
function createComponent(data) {
return {
init() { return data }
}
}
const p = createComponent('a')
const q = createComponent('b')
console.log(p.init === q.init) //false
console.log(p.init()) //a
console.log(q.init()) //b
的构造函数here并查看moment
和moment.utc
答案 1 :(得分:1)
这里的问题是巴西在午夜进行夏令时,这使“白昼”的概念混淆不清。 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');