новая дата() работает по-разному в 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/
как я могу исправить эту проблему, чтобы получить тот же результат с обоих?
5 ответов:
правильный формат для UTC будет
2013-02-27T17:00:00Z
(Z для Zulu время). ДобавитьZ
если нет, чтобы получить правильную строку UTC datetime.
да, к сожалению, алгоритмы разбора даты зависят от реализации. Из спецификация
Date.parse
(который используетсяnew Date
):строка может быть интерпретирована как местное время, UTC или время в другом часовом поясе, в зависимости от содержимого строки. Функция сначала пытается проанализировать формат строки в соответствии с правилами, вызванными в формате строки даты и времени (15.9.1.15). Если строка не соответствует этому формату, функция может вернуться к любой конкретной реализации эвристики или конкретных форматов даты реализации.
сделать
Date
конструктор не (возможно) использовать локальный часовой пояс, использовать строку datetime с информацией о часовом поясе, например"2013-02-27T17:00:00Z"
. Однако трудно найти формат, который надежно анализируется каждым браузером-формат ISO не распознается IEJavaScript: какие браузеры поддерживают синтаксический анализ строки даты ISO-8601 с датой.разбор). Лучше использовать метку времени unix, т. е. миллисекунды с момента эпоха unix, или используйте регулярное выражение, чтобы разбить строку на части, а затем передать их вDate.UTC
.
Я нашел здесь одну вещь. Кажется, родная консоль Firefox Inspector может иметь ошибку: Если я запускаю "new Date ()" в собственном инспекторе, он показывает дату с неправильным часовым поясом, локаль GMT, но запускает ту же команду в консоли расширения Firebug, показанная дата использует мой правильный часовой пояс (GMT-3:00).