Ответ 1
Попробуйте следующее: http://anentropic.wordpress.com/2009/06/25/javascript-iso8601-parser-and-pretty-dates/
Как вы сейчас разбираете даты 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
Попробуйте следующее: http://anentropic.wordpress.com/2009/06/25/javascript-iso8601-parser-and-pretty-dates/
Это отличная реализация, которая охватывает крайние случаи и возвращается к исходной реализации. https://github.com/csnover/js-iso8601/
Как уже упоминалось, это не в спецификации третьего издания. Однако в спецификации 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.
}
}
})();
На вопрос в заголовке: Не изначально (как вы протестировали:))
В 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
можно проанализировать полностью неуказанный.