2013-05-13 5 views
1

Я столкнулся с тем, что кажется странным результатом Firefox. В следующем формате:Firefox, возвращающийся недействительным для смещения часового пояса?

2013/01/01 00:00:00-0000 

Для моей даты у меня возникает проблема, когда часовой пояс «положительный». Например.

new Date('2013/01/01 05:00:00-0000') 
Date { Tue Jan 01 2013 00:00:00 GMT-0500 (EST) } 

Но.

new Date('2013/01/01 05:00:00+0100') 
Date { Invalid Date } 

я ожидал бы скорее получить:

Дата {пн 31 декабря 2012 23:00:00 GMT-0500 (EST)}

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

EDIT: добавлен http://jsfiddle.net/utm4f/

Выполнить в Firefox и вернет неверную дату (я бегаю Firefox 20 на OS X 10.8.3)

+0

Какая версия Firefox именно вы используете? И вы подтвердили, что он работает для негативных смещений (вы указали только «0»)? – Bergi

+0

FF 20.0. Да, я пробовал использовать консоль FF. -0200, -0300 и т. Д. ... все работает, как только вы пытаетесь +0100, он терпит неудачу. –

ответ

0

Ну, я нашел проблему, бросая все, что я может у него. Очевидно, что Firefox требует пространства между временем и часовым поясом.

new Date('2013/01/01 05:00:00 +0100') 
new Date('2013/01/01 05:00:00 -0100') 

В - часовых поясов не будет ошибки без пробела, но + из них будет.

0

Вы можете захотеть использовать ISO8601 значения вместо, например:

2013-12-31T01:23:45-07:00 

Синтаксический ИСО даты будет работать на всех новых браузерах, но не на некоторых старых, особенно IE8. Существует отличное описание поддержки браузера для этого here, а также прокладка для более старой поддержки браузера.

Но если вы действительно хотите поддерживать все несоответствия в разных браузерах, лучший способ (IMHO) - это moment.js.

var m = moment('2013-12-31T01:23:45-07:00'); 

Или даже с помощью другого формата, с явной строки синтаксического анализа:

var m = moment('2013/01/01 00:00:00-0000', 'YYYY/MM/DD HH:mm:ssZZ');