ExtJS даты и часовые пояса - PullRequest
       29

ExtJS даты и часовые пояса

5 голосов
/ 18 января 2011

У меня проблема с классом Ext Date, который, по-видимому, возвращает неправильный часовой пояс для проанализированной даты. Используя приведенный ниже код, я создаю объект даты для 24 мая 1966 г. 15:46 BST:

date = "1966-05-24T15:46:01+0100";
var pDate = Date.parseDate(date, "Y-m-d\\TH:i:sO", false);

Я тогда называю это:

console.log(pDate.getGMTOffset());

Я ожидаю получить смещение, связанное с оригинальной датой назад (то есть GMT + 1), но вместо этого я получаю местный часовой пояс браузера. Если браузер настроен на часовой пояс достаточно далеко впереди GMT, дневная часть даты также будет перенесена (поэтому дата будет отображаться как 25 мая 1966 г.).

Кто-нибудь знает, как обойти это и заставить Ext распознавать правильный часовой пояс проанализированной даты, а не часовой пояс локального браузера?

Если это невозможно, можно ли принудительно использовать Ext вместо GMT для интерпретации часовых поясов?

Ответы [ 3 ]

6 голосов
/ 18 января 2011

Я проверил реализацию parseDate () в исходном коде ExtJS и документацию о дате в основном JavaScript , конструктор Date (), используемый ExtJS, не поддерживает информацию о часовом поясе. JavaScript Date объекты представляют значение UTC, без часового пояса. Во время синтаксического анализа в исходном коде ExtJS часовой пояс теряется, а соответствующее смещение в минутах / секундах добавляется к дате.

Затем я проверил исходный код getGMTOffset (), определенный в ExtJS : он строит строку часового пояса с помощью функции getTimezoneOffset (), определенной в JavaScript.

Цитирование документации getTimezoneOffset () :

Смещение часового пояса - это разница между местным временем и Гринвичем Время (GMT) Летнее время препятствует тому, чтобы это значение было постоянная.

Часовой пояс не является переменной, хранящейся в дате, это значение, которое изменяется в зависимости от периода года, в который попадает дата.

На моем компьютере с французским языком

new Date(2010,1,20).getTimezoneOffset()
// -60
new Date(2010,9,20).getTimezoneOffset()
// -120

Редактировать: это поведение не относится только к синтаксическому анализу даты в ExtJS, здесь также применимо следующее примечание в документации Date.parse () в Mozilla Doc Center :

Обратите внимание, что пока указатели часового пояса используются при разборе строки даты в правильно истолковать аргумент, они не влияет на возвращаемое значение, который всегда является числом миллисекунды с 1 января 1970 года 00:00:00 UTC и момент времени представлен аргументом.

2 голосов
/ 15 ноября 2012

Я немного опоздал, но в последней версии ExtJS вы можете передать опциональное логическое значение для предотвращения "опрокидывания" в JS

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.Date-method-parse

0 голосов
/ 02 ноября 2011

Мои два цента, потому что я не могу установить все свое время на 12:00, как Тим. Я разместил на форуме sencha

...