Javascript/EcmaScript3 支持 ISO8601 日期解析吗?

发布于 2024-08-25 10:14:02 字数 522 浏览 5 评论 0原文

您目前如何在 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

How are you currently parsing ISO8601 dates e.g. 2010-02-23T23:04:48Z in JavaScript?

Some browsers return NaN (including Chrome) when using the code below, FF3.6+ works though.

<html>
<body>
  <script type="text/javascript">
  var d = Date.parse("2010-02-23T23:04:48Z");
  document.write(d);
</script>
</body>
</html>

You can try this here http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parse

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

花期渐远 2024-09-01 10:14:03

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

This is an excellent implementation which covers edge cases and falls back to native implementation. https://github.com/csnover/js-iso8601/

·深蓝 2024-09-01 10:14:03

正如其他人提到的,它不在第三版规范中。然而它在第五版规范中,我引用:

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.
        }
    }
})();

As others have mentioned, it's not in the 3rd edition specification. It is in the 5th edition specification however, and I quote:

ECMAScript defines a string interchange format for date-times based upon a simplification of the ISO 8601 Extended Format. The format is as follows: YYYY-MM-DDTHH:mm:ss.sssZ

So it should be trickling into browsers soon (IE9, Chrome 1, Firefox 4 are at least some of the browsers supporting ISO 8601 dates). If you want to implement a solution in the meantime, you might want to optimize so that your script can take advantage of the native if available:

(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.
        }
    }
})();
蓝天 2024-09-01 10:14:03

关于标题中的问题:不是本机的(正如您测试过的:))

在 ECMA-262 (3/e) 中,对 Date.parse[15.9.4.2]< 的唯一要求/sup> 是通过 .toString() 进行的往返转换,并且 .toUTCString() 不会更改 Date 对象,即

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

.toString( )[15.9.5.2].toUTCString()[15.9.5.42] 取决于实现,那么什么格式 < code>Date.parse 可以解析完全未指定。

On the question in the title: Not natively (as you've tested :) )

In ECMA-262 (3/e) the only requirement for Date.parse[15.9.4.2] is the round-trip conversion via .toString() and .toUTCString() won't change the Date object, i.e.

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

and both .toString()[15.9.5.2] and .toUTCString()[15.9.5.42] are implementation-dependent, so what format Date.parse can parse is totally unspecified.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文