- PVSM.RU - https://www.pvsm.ru -

Решение проблемы со временем в ExtJS 3 (после patch’а KB2998527)

Всем доброго времени суток!

Прочитав очередную статью [1] про проблему со временем в JavaScript (для браузеров Windows (RU) после patch'а KB2998527 [2]), я стал понимать, что мало кто приводит общее решение для ExtJS 3.

Вероятно, вы уже в курсе проблемы, а если нет, то стоит прочесть статью «Хром, укравший рождество» [3]. Она важна для веб-разработчиков, клиенты которых из РФ.

Ещё до появления статьи наткнулся на этот баг. Сначала я и мой коллега подумали, что проблема с обновлением Chrom'а, но через час уже нашли компонент, который и приводил к зависанию, им оказался Ext.form.TimeField [4]. Дальнейший анализ привёл к функции:

generateStore: function(initial){
        var min = this.minValue || new Date(this.initDate).clearTime(),
            max = this.maxValue || new Date(this.initDate).clearTime().add('mi', (24 * 60) - 1),
            times = [];

        while(min <= max){
            times.push(min.dateFormat(this.format));
            min = min.add('mi', this.increment);
        }
        this.bindStore(times, initial);
    }

Как видите, для получения значений используется цикл. На тот момент я его изменил на for c 0 до (24 * 60) / this.increment.

Но уже после, поняв, в чём проблема (в нашем случае this.initDate = '1/1/2008', где следующий «пропавшая» среда 02/01/2008), написал небольшой патч:

Ext.override(Ext.form.TimeField, {
    initDate: '2/1/2008'
});

Т.е. мы всего лишь указываем день, чтобы следующий не был средой, подробнее [3]. Для новых версий всё аналогично, они там так же используют initDate как 1/1/2008.

Автор: chamaeleon

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/72543

Ссылки в тексте:

[1] статью: http://habrahabr.ru/post/241215/

[2] KB2998527: http://support.microsoft.com/kb/2998527

[3] «Хром, укравший рождество»: http://habrahabr.ru/post/239423/

[4] Ext.form.TimeField: http://docs.sencha.com/extjs/3.4.0/#!/api/Ext.form.TimeField

[5] Источник: http://habrahabr.ru/post/241359/