2016-09-19 2 views
0

Я пытаюсь увеличить 1 день в цикле в октябре (2016), но было странное поведение. При прибытии на 10/15/2016 он не увеличивается на 1 день, всего 23 часа.Moment.js - странное поведение при добавлении дней

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/

+0

консоли скрипку показывает ошибку о том, , 'момент не определен' :( –

+3

добро пожаловать в мир DST, когда переход на летнее время меняется в определенные временные интервалы. –

+0

@DavidR здесь работает. Попробуйте jsbin: http://jsbin.com/dejunenimi/edit?js, пульт –

ответ

3

Это потому, что октябрь, когда летнее время вступает в силу, компенсируя тем самым ваше время на 1 час

Пожалуйста, прочтите о moment «s конструктор here и посмотреть на moment.utc и moment.parseZone

1

Проблема вот, что Бразилия делает дневные сбережения в полночь, что смущает концепцию «дня». То, что Moment пытается сделать, это установить день текущего текущего времени с днем ​​= исходным днем ​​+ 1.

Проблема в том, что когда он создает дату JS как 2013-10-20T00: 00: 00, библиотека исходных дат запуталась, потому что этого времени в Бразилии не существует. Поведение меняется немного браузера в браузер, но вот поведение в узле и 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'); 
Смежные вопросы