Javascript setHours (1) не работает на 27 марта 2011 01:00:00 GMT + 0100 - PullRequest
3 голосов
/ 22 марта 2011

Я совершенно сбит с толку, почему это не работает?

Я перебираю диапазон дат и просто добавляю 1 час шаг за шагом.Это работало нормально до этой недели.В основном, пока дата не достигнет 27 марта 2011 01:00:00 GMT + 0100.Тогда он просто залипает и ничего не добавляет.Если я добавлю + 3h, то он снова будет работать, но не с + 1.

Я использую Firebug на Firefox, а также попробовал его в консоли.

Sun Mar 27 2011 01:00:00 GMT+0100

>>> this.setHours(0);
1301180400000
>>> this.setHours(1);
1301184000000
>>> this.setHours(2);
1301184000000
>>> this.setHours(3);
1301187600000

Это код:

Date.prototype.addHours = function (h) {
    this.setHours(this.getHours() + h);
    return this;
}

У меня такая же ошибка в Safari и Chrome.

Ответы [ 4 ]

5 голосов
/ 22 марта 2011

Летнее время, вызывающее такое поведение.27 марта - день начала летнего времени.

Редактировать:

Надеюсь, что это решит вашу проблему: Переход на летнее время в JavaScript

2 голосов
/ 09 февраля 2015

Я знаю, что этот вопрос довольно старый, но на тот случай, если кто-то еще столкнется с этой проблемой, используя методы UTC, вы можете избежать такого поведения:

Date.prototype.addHours = function (h) {
    this.setUTCHours(this.getUTCHours() + h);
    return this;
}
2 голосов
/ 22 марта 2011

Просто предположение: это может быть связано с переходом на летнее время?

1 голос
/ 24 апреля 2012

У меня возникла та же проблема, что и у вас, и я решил ее с помощью

Date.prototype.addHours = function (h) {
    this = new Date(this.getTime() + h*3600000);
    return this;
}

Я не уверен, что создание нового объекта Date - хорошая идея, но она работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...