Поддерживает ли Javascript/EcmaScript3 синтаксический анализ даты ISO8601?

Как вы сейчас разбираете даты ISO8601, например. 2010-02-23T23: 04: 48Z в JavaScript?

Некоторые браузеры возвращают NaN (включая Chrome) при использовании кода ниже, однако FF3.6 + работает.

<html>
<body>
  <script type="text/javascript">
  var d = Date.parse("2010-02-23T23:04:48Z");
  document.write(d);
</script>
</body>
</html>

Вы можете попробовать это здесь http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parse

Ответы

Ответ 2

Это отличная реализация, которая охватывает крайние случаи и возвращается к исходной реализации. https://github.com/csnover/js-iso8601/

Ответ 3

Как уже упоминалось, это не в спецификации третьего издания. Однако в спецификации 5-го издания я цитирую:

ECMAScript определяет формат обмена строк для дат-времен, основанный на упрощении формата ISO 8601 Extended. Формат выглядит следующим образом: ГГГГ-ММ-ДДХ: мм: ss.sssZ

Поэтому в браузерах это должно скоро появиться (IE9, Chrome 1, Firefox 4 - это, по крайней мере, некоторые из браузеров, поддерживающих даты ISO 8601). Если вы хотите внедрить решение тем временем, вы можете оптимизировать его, чтобы ваш script мог использовать встроенный, если он доступен:

(function ()
{
    if (isNaN(Date.parse("2010-02-23T23:04:48Z")))
    {
        var oldParse = Date.parse;
        Date.parse = function (strTime)
        {
           // regex test strTime for ISO 8601, use oldParse if it isn't
           // Use custom parser if it is.
        }
    }
})();

Ответ 4

На вопрос в заголовке: Не изначально (как вы протестировали:))

В ECMA-262 (3/e) единственным требованием для Date.parse [15.9.4.2] является преобразование "туда и обратно" через .toString() и .toUTCString() не изменит Объект Date, т.е.

 Date.parse(x.toString()) == Date.parse(x.toUTCString()) == x

и .toString() [15.9.5.2] а .toUTCString() [15.9.5.42] зависят от реализации, поэтому в формате Date.parse можно проанализировать полностью неуказанный.