Всем доброго времени суток!
Прочитав очередную статью про проблему со временем в JavaScript (для браузеров Windows (RU) после patch'а KB2998527), я стал понимать, что мало кто приводит общее решение для ExtJS 3.
Вероятно, вы уже в курсе проблемы, а если нет, то стоит прочесть статью «Хром, укравший рождество». Она важна для веб-разработчиков, клиенты которых из РФ.
Ещё до появления статьи наткнулся на этот баг. Сначала я и мой коллега подумали, что проблема с обновлением Chrom'а, но через час уже нашли компонент, который и приводил к зависанию, им оказался Ext.form.TimeField. Дальнейший анализ привёл к функции:
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'
});
Т.е. мы всего лишь указываем день, чтобы следующий не был средой, подробнее. Для новых версий всё аналогично, они там так же используют initDate как 1/1/2008.
Автор: chamaeleon