New Date() работает по-разному в Chrome и Firefox

Я хочу преобразовать строку даты в Date с помощью javascript, используйте этот код:

var date = new Date('2013-02-27T17:00:00');
alert(date);

'2013-02-27T17:00:00' - время UTC в объекте JSON с сервера.

Но результат вышеуказанного кода отличается от Firefox и Chrome:

Firefox возвращает:

Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time)

Возврат Chrome:

Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time) 

Разный 1 день, правильный результат, который я ожидаю, является результатом использования Chrome.

Демо-код: http://jsfiddle.net/xHtqa/2/

Как я могу исправить эту проблему, чтобы получить тот же результат от обоих?

Ответ 1

Правильный формат для UTC будет 2013-02-27T17:00:00Z (Z для Zulu Time). Добавить Z, если нет, чтобы получить правильную строку UTC datetime.

Ответ 2

Да, к сожалению, алгоритмы синтаксического анализа даты зависят от реализации. Из спецификация Date.parse (который используется new Date):

Строка может быть интерпретирована как локальное время, время UTC или время в каком-либо другом часовом поясе, в зависимости от содержимого строки. Сначала функция пытается проанализировать формат строки в соответствии с правилами, выписанными в формате строки времени даты (15.9.1.15). Если String не соответствует этому формату, функция может вернуться к любой эвристике, специфичной для конкретной реализации, или к форматам дат реализации.

Чтобы сделать Date конструктор, не (возможно) использовать локальный часовой пояс, используйте строку datetime с информацией о часовом поясе, например. "2013-02-27T17:00:00Z". Тем не менее, трудно найти формат, который надежно анализируется каждым браузером - формат ISO не распознается IE < 8 (см. JavaScript: какие браузеры поддерживают синтаксический анализ ISO-8601 Date String с Date.parse). Лучше используйте временную метку unix, то есть миллисекунды с unix epoch, или используйте выражение regulare, чтобы разбить строку по ее частям, а затем подать эти в Date.UTC.

Ответ 3

Я нашел здесь одно. Кажется, что у встроенной консоли инспекторов Firefox может быть ошибка: Если я запускаю новую дату() в встроенном инспекторе, она показывает дату с неправильным часовым поясом, местным языком GMT, но с той же командой в консоли расширения Firebug, указанная дата использует мой правильный часовой пояс (GMT-3: 00).

Ответ 4

Попробуйте использовать moment.js. Он идет очень хорошо и аналогичным образом со всеми браузерами. поставляется со многими вариантами форматирования. ( "дата" ). format ( ") вместо" Новая дата" ( "дата" )

Ответ 5

Заметьте, что FireFox не возвращал тот же результат, что и Chrome. Похоже, формат, который вы используете в kendo.toString для даты, имеет значение.

Последний результат консоли - это то, что мне нужно:

введите описание изображения здесь