Javascript/EcmaScript3 поддерживает парсинг даты ISO8601?

Как Вы в настоящее время анализируете даты ISO8601, например, 2010-02-23T23:04:48Z в JavaScript?

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



  


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

12
задан Jonathan Leffler 8 July 2011 в 00:31
поделиться

3 ответа

4
ответ дан 2 December 2019 в 19:31
поделиться

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

В 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 может анализировать полностью не указано.

2
ответ дан 2 December 2019 в 19:31
поделиться

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

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

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

(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.
        }
    }
})();
3
ответ дан 2 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: