【问题标题】:JSON ISO8601 parsing in JavaScriptJavaScript 中的 JSON ISO8601 解析
【发布时间】:2012-12-14 21:39:12
【问题描述】:

仍在学习 JavaScript 日期处理的细微差别,其中 看起来 像某处的错误。

使用 .ToUniversalTime()... 从 C# 返回记录就像一个魅力,但是,JavaScript 对返回的某些日期/时间犹豫不决。

好消息:2012-12-14T21:25:44.273Z toLocaleTimeString() 返回下午 2:25:44

坏处:2012-12-14T21:25:44.18Z 返回无效日期

丑陋的:最后的 .18Z 是什么...应该是 .018Z 还是 .180Z?而且,它是 C# 错误还是 JavaScript 错误?

【问题讨论】:

  • 您是否总是有时间以Z 结尾,或者是否有其他时区(例如-10:00)?
  • 您正在为 JavaScript 尝试哪些浏览器或其他环境?这两个示例在 Chrome 中都可以正常工作:jsfiddle.net/veHEk.
  • 我在 Chrome 中运行了它,是的,一个 IE9 错误(或没有功能)看起来像。第二个结果显示 NaN。感谢您指出这一点。
  • 这种差异可能不像竞争标准那样是一个错误。 ECMA-262 指定毫秒格式为“三个十进制数字”——es5.github.com/#x15.9.1.15。然而,W3C 将它们指定为“一个或多个数字”——w3.org/TR/NOTE-datetime。所以,.180Z 会满足两者。

标签: javascript datetime iso8601


【解决方案1】:

是的,这是一个 IE9 错误,它在 IE10 中确实有效。但是,您可以使用Moment.js 使这项工作始终如一地跨浏览器工作,是的 - 它确实在 IE9 中工作。

// This works in IE10 and Chrome, fails in IE9
alert(new Date("2012-12-14T21:25:44.18Z"));


// This works everywhere
alert(moment("2012-12-14T21:25:44.18Z"));

【讨论】:

    【解决方案2】:

    使用 Date.parse 解析 ISO-8601 日期时间。

    【讨论】:

      猜你喜欢
      • 2012-07-30
      • 1970-01-01
      • 2012-08-20
      • 2019-03-02
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      相关资源
      最近更新 更多