Разные результаты Date.parse за 2011-11-15 и 2011/11/15 - PullRequest
2 голосов
/ 17 ноября 2011

Почему Date.parse("2011-11-15") считает текущий часовой пояс в веб-браузере, а Date.parse("2011/11/15") - нет?Почему результаты разные?

Ответы [ 2 ]

9 голосов
/ 17 ноября 2011

Первая форма считается датой ISO в UTC, в соответствии с разделом 15.9.1.15 ECMA-262 .Вторая форма рассматривается в зависимости от реализации, как указано в разделе 15.9.4.2:

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

Так что я подозреваю, что «2011/11/15» преобразуется в местный полночь 15 ноября, тогда как "2011-11-15" переводится в UTC полночь 15 ноября.

1 голос
/ 17 ноября 2011

из date.parse документация

строка даты / времени может быть в формате ISO 8601. Начиная с JavaScript 1.8.5 / Firefox 4, подмножество ISO 8601 поддерживается. За Например, «2011-10-10» (только дата) или «2011-10-10T14: 48: 00 (дата и время) можно пройти и разобрать. Часовые пояса в датах ISO еще не поддерживается, например, «2011-10-10T14: 48: 00 + 0200» (с часовым поясом) не дать ожидаемый результат.

...