Изменить: это не ошибка, как указал Мартин. Я просто перехожу на летнее время, отсюда и разница в 1 час.
Я хочу рассчитать разницу в днях между «29 марта 2010 г.» и «09 марта 2010 г.», поэтому у меня есть следующий код:
((new Date(2010, 2, 29)).getTime() - (new Date(2010, 2, 8)).getTime()) / 86400000
86400000 — это количество миллисекунд в дне, а разница между датами возвращается в миллисекундах, так что это должно работать. Только не совсем. я получил
20.958333333333332
Разница между этими двумя датами неверна. Предполагается, что это 1814400000 (21 день умножить на 86400000), но на самом деле это 1810800000.
Более того, если я изменю разницу на:
((new Date(2010, 2, 28)).getTime() - (new Date(2010, 2, 7)).getTime()) / 86400000
та же разница, только сдвинутая на один день назад, я получаю нормальные результаты.
Это происходит, только если мы пытаемся получить (x-y), где x после 29 марта 2010 г., а y до 29 марта 2010 г.
Я получаю это в Safari 4 и Firefox 3.6 на Mac, а также в IE 8 на Windows 7. Другие браузеры не пробовал.
Я что-то не так делаю или это известная ошибка?