Ответ 1
Правильный формат для UTC будет 2013-02-27T17:00:00Z
(Z для Zulu Time). Добавить Z
, если нет, чтобы получить правильную строку UTC datetime.
Я хочу преобразовать строку даты в 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/
Как я могу исправить эту проблему, чтобы получить тот же результат от обоих?
Правильный формат для UTC будет 2013-02-27T17:00:00Z
(Z для Zulu Time). Добавить Z
, если нет, чтобы получить правильную строку UTC datetime.
Да, к сожалению, алгоритмы синтаксического анализа даты зависят от реализации. Из спецификация 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
.
Я нашел здесь одно. Кажется, что у встроенной консоли инспекторов Firefox может быть ошибка: Если я запускаю новую дату() в встроенном инспекторе, она показывает дату с неправильным часовым поясом, местным языком GMT, но с той же командой в консоли расширения Firebug, указанная дата использует мой правильный часовой пояс (GMT-3: 00).
Попробуйте использовать moment.js. Он идет очень хорошо и аналогичным образом со всеми браузерами. поставляется со многими вариантами форматирования. ( "дата" ). format ( ") вместо" Новая дата" ( "дата" )
Заметьте, что FireFox не возвращал тот же результат, что и Chrome. Похоже, формат, который вы используете в kendo.toString для даты, имеет значение.
Последний результат консоли - это то, что мне нужно: