代码之家  ›  专栏  ›  技术社区  ›  Alex Nolasco

javascript/ecmascript3是否支持ISO8601日期解析?

  •  12
  • Alex Nolasco  · 技术社区  · 14 年前

    您目前如何分析ISO8601日期,例如 2010年2月23日23: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

    4 回复  |  直到 14 年前
        2
  •  9
  •   sandstrom    13 年前

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

        3
  •  3
  •   Andy E    13 年前

    正如其他人提到的,它不在第三版规范中。但是,它在第5版规范中,我引用了:

    ECMAScript根据ISO 8601扩展格式的简化定义了日期时间的字符串交换格式。格式如下: yyyy-mm-ddthh:mm:ss.sssz年-月-日

    所以它很快就会进入浏览器(IE9、Chrome1、FireFox4至少是一些支持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.
            }
        }
    })();
    
        4
  •  2
  •   kennytm    14 年前

    关于标题中的问题:不是本地的(正如您测试的那样:)

    在ECMA-262(3/E)中,唯一要求 Date.parse [157.4.2] 往返转换是通过 .toString() .toUTCString() 不会更改日期对象,即

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

    而且两者 toSTRIN() [157.5.2] TutcStRun() [157.5.42] 是否依赖于实现,那么什么格式 数据解析 无法解析完全未指定。