Как стать автором
Обновить

Комментарии 10

«Тайный день», 32-й, Только в IЕ ))
IE 8.0.7600.16385 — тоже все показывает правильно.
Високосный год?
опять перевод часов +-1 час и особенности округления? :)
В России переход на летнее время осуществляется в последнее воскресенье марта (в 2009 году — 29 марта, 2010 — 28 марта). В этот день, в два часа ночи стрелки переводятся на час вперёд. Переход на «зимнее время» осуществляется в последнее воскресенье октября (в 2009 году — 25 октября, в 2010 — 31 октября). Из-за этого октябрь является самым длинным месяцем года.
IE 8.0.7600.16385 — всё работает правильно.

У вас с настройками часового пояса что-то не то.
Часовый пояс — (UTC+03:00) Волгоград, Москва, Санкт-Петербург
Windows 7.
Вы не указали, в какой час проводилось тестирование, а оно участвует в (new Date()). Поэтому пример представлен некорректно. Если тестирование было между 2 и 3 часами ночи, то где-то была выявлена разница в способе расчёта. Воспользуйтесь для выявления истины выражением

alert( (( (new Date('1 Nov 2010, 2:01')) — (new Date('31 Oct 2010, 1:59')) )/86400000*24) )

Оно показывает разницу в часах. Здесь — 25 часов и 2 минуты (по FF 3.6). А здесь

alert( (( (new Date('1 Nov 2010, 2:01')) — (new Date('31 Oct 2010, 2:01')) )/86400000*24) )

— 24 часа. В IE6 у меня то же самое, а на других компьютерах может различаться в зависимости от установленных обновлений в IE (когда меняются законы о порядке ввода летнего времени в разных странах, это прописывается в обновлениях; не прописано — будет что-то по-старому).
В общем, чтобы обойти эту ошибку (не браузера, а программиста), надо брать дату за «сегодня» в 0 часов, в 12 часов, но никак не между 2 и 3, а для некоторых стран, возможно, есть другой час ввода летнего времени.

Другими словами, писать не now = new Date();, а

now = new Date();
now=new Date(now.getFullYear()+'/'+(now.getMonth()+1)+'/'+now.getDate());
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории