Новый Часовой Пояс – Новые Проблемы

Вернувшись из короткого отпуска, я обнаружил, что админ установил новый часовой пояс RTZ 2. В результате некоторые браузеры стали несколько странно работать с датами.

Вот, например, как выглядит декабрь 2013 года в календаре jquery ui (довольно старая версия):

Новый часовой пояс – новые проблемы

В том, что его надо обновлять, сомнений нет, но это корпоративная среда, и не все так просто.

Я пошел посмотреть, что происходит, и увидел странные вещи.

Начал с самого простого

  
  
  
  
  
   

var date = new Date(2014,0,1)

В IE8 это не 1 января, как можно подумать, а 31 декабря 2013 года! (проверьте старые версии).

Но к своеобразному поведению 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

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.