繁体   English   中英

Javascript / EcmaScript3是否支持ISO8601日期解析?

[英]Does Javascript/EcmaScript3 support ISO8601 date parsing?

您目前如何在JavaScript中解析ISO8601日期,例如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

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

正如其他人所提到的,它不在第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.
        }
    }
})();

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

在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可以解析的格式是完全未指定的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM