Вернувшись из короткого отпуска, я обнаружил, что админ установил новый часовой пояс RTZ 2. В результате некоторые браузеры стали несколько странно работать с датами.
Вот, например, как выглядит декабрь 2013 года в календаре jquery ui (довольно старая версия):
В том, что его надо обновлять, сомнений нет, но это корпоративная среда, и не все так просто.
Я пошел посмотреть, что происходит, и увидел странные вещи.
Начал с самого простого
В IE8 это не 1 января, как можно подумать, а 31 декабря 2013 года! (проверьте старые версии).var date = new Date(2014,0,1)
Но к своеобразному поведению IE все уже давно привыкли, а скриншот, показанный выше, был сделан в Chrome, результаты те же.
Хорошо, но что делать с календарем? Если покопаться в исходниках, то причина вышеприведенной картины – неправильное определение количества дней в месяце.
Приведенный ниже код для декабря в Chrome и IE возвращает 1! return 32 - new Date(year, month, 32).
getDate();
Пока что заменил на это, вроде работает: return new Date(year, month+1, 0).
getDate();
Сеттеры также работают неправильно.
Например, и в Chrome, и в IE следующий код дает удивительные результаты: var date = new Date(2014,0,2);
date.setDate(1);
Я пока не обнаружил никаких проблем в Opera или Firefox. Кроме того, в последней версии jquery ui от декабря 2013 г.
он отображается нормально.
Однако теперь вам придется проверить наличие сценариев на 1 января 2014 г.
Как вы боретесь с этой проблемой? УПД
Пока не будут опубликованы исправленные версии браузеров, вы можете исправить календарь напрямую в jquery ui.
— если вы используете старую версию, то вам необходимо изменить функцию определения количества дней в месяце: /* Find the number of days in a given month. */
_getDaysInMonth: function(year, month) {
return new Date(year, month+1, 0).
getDate();
},
Кроме того, нужно изменить функцию расчета дня недели первого дня месяца, добавив к дате хотя бы 1 час (4-й аргумент): /* Find the day of the week of the first of a month. */
_getFirstDayOfMonth: function(year, month) {
return new Date(year, month, 1, 1).
getDay();
},
Без этого исправления январь 2014 года отображается некорректно - как будто он начался во вторник.
Теги: #timezone #timezone #rtz #JavaScript
-
Рекламный Щит «Игра На Выживание» Для Xbox
19 Oct, 24 -
Yahoo! Карты – Больше Не Бета-Версия
19 Oct, 24