Javascript / EcmaScript 3是否支持ISO 8601日期解析?

时间:2010-03-19 18:32:46

标签: javascript datetime iso8601

您目前如何解析ISO8601日期,例如JavaScript中的 2010-02-23T23:04:48Z

有些浏览器在使用下面的代码时返回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

尝试此操作

4 个答案:

答案 0 :(得分:9)

这是一个很好的实现,涵盖边缘情况并回退到本机实现。 https://github.com/csnover/js-iso8601/

答案 1 :(得分:4)

答案 2 :(得分:3)

正如其他人所说,它不在第3版规范中。然而,它是在第5版规范中,我引用:

  

ECMAScript根据ISO 8601扩展格式的简化为日期时间定义字符串交换格式。格式如下: YYYY-MM-DDTHH:mm: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)

关于标题中的问题:不是本地的(因为你已经测试过:))

在ECMA-262(3 / e)中,Date.parse [15.9.4.2] 的唯一要求是通过.toString()和{{1}进行往返转换}不会更改Date对象,即

.toUTCString()

并且 Date.parse(x.toString()) == Date.parse(x.toUTCString()) == x [15.9.5.2] .toString() [15.9.5.42] 都是依赖于实现的,所以格式为{{ 1}}解析完全没有指定。