【问题标题】:Parsing ISO8601-like date in JavaScript: new Date() doesn't work across browsers在 JavaScript 中解析类似 ISO8601 的日期:new Date() 不能跨浏览器工作
【发布时间】:2013-11-07 05:09:42
【问题描述】:

如何将来自数据库的日期字符串转换为新的 Date() 对象?

如果我执行以下操作:

var x = new Date('2013-11-05 11:01:46:0');
alert(x);

它在 Chrome 中有效,但在 Safari 中它给了我字符串“无效日期”。 Here's the fiddle.

【问题讨论】:

  • This may help you,虽然不一样。
  • moment.js: moment('2013-11-05 11:01:46:0', 'YYYY-MM-DD HH:mm:ss:S')(然后toDate() 得到一个Date对象)
  • 使用良好的接送线。
  • @EdHinchliffe,我必须向我的同事解释我为什么要大声笑。

标签: javascript date cross-browser


【解决方案1】:

new Date(string) 接受的字符串格式取决于实现。但是,如果浏览器正确实现了 ES5 规范,则应该接受 a strict subset of legal ISO 8601 strings。基本上,您需要使用 UTC 而不是本地时间,在日期和时间之间放置一个“T”而不是空格,在整数和小数秒之间使用小数点而不是冒号,并在末尾附加一个“Z”整件事:

2013-11-05T11:01:46.000Z

也许您可以让您的数据库以该格式输出日期;否则,您应该查看第三方库,例如moment.js

【讨论】:

  • 哇。好吧,至少我知道现在该处理什么了。谢谢马克!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多