новая дата() работает по-разному в 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 84

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).

попробуйте использовать момент.js. Это идет очень хорошо и аналогичным образом со всеми браузерами. поставляется с большим количеством параметров форматирования. используйте момент ('дата').формат ("") вместо новой даты ('date')

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

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

enter image description here