2011-01-18 5 views
5

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

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

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

console.log(pDate.getGMTOffset()); 

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

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

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

ответ

6

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

Затем я проверил source code of getGMTOffset() defined by ExtJS: он строит строку временной зоны, используя функцию getTimezoneOffset(), определенную в JavaScript.

Цитируя documentation of getTimezoneOffset():

В смещение часового пояса разница между местным временем и по Гринвичу Время (GMT). Переход на летнее время не позволяет этому значению быть константой .

Время-зона не переменная хранится в Дату, это значение, которое меняется в зависимости от времени года, что дата попадает в.

На моем компьютере, с французской локали ,

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

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

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

+2

Спасибо, много полезной информации там. Для будущих гуглеров, которые случаются в этой теме, мне удалось решить мою проблему, установив все даты до 12.00 дня, поэтому Ext не сможет заставить день опрокинуться, тем самым обойдя первоначальную проблему. Не идеально, но он работает достаточно хорошо .... – TimS

0

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

Смежные вопросы