2012-01-11 57 views
9

Youtube的API返回带有一系列视频的JSON对象。每个视频对象都有一个格式为“2012-01-11T20:49:59.415Z”的发布日期。如果我使用下面的代码初始化Javascript日期对象,则该对象返回“无效日期”。使用Javascript分析Youtube API日期

var dt = new Date("2012-01-11T20:49:59.415Z"); 

我在iOS/Mobile Safari上使用此功能,如果这样做有所帮助。

有关如何创建有效对象的任何建议或想法?

回答

3

我最终找到在http://zetafleet.com/blog/javascript-dateparse-for-iso-8601的解决方案。看起来日期的格式为“ISO 8601”。在早期的浏览器(Safari 4,Chrome 4,IE 6-8)中,不支持ISO 8601,所以Date.parse不起作用。从链接的博客文章中引用的代码扩展了当前的日期类,以支持ISO 8601

0

如果您只需要日期的一部分(例如,如果您不关心时间或时区),则可以将日期字符串的那部分去掉。

+0

我试图通过从Date对象拉毫秒来生成一个相对的日期,如“21天前”。 – 2012-01-11 21:56:18

+0

当完成通过ISO 8601脚本的日期渲染时,这很容易。将全局新日期解析为ISO 8601日期对象,然后从“当前日期”中减去“发布日期”... – 2015-07-11 11:45:14

4

尝试使用JavaScript的Date.parse(string)Date constructor,它取自历元以来的毫秒数。 “解析”功能应在任何浏览器上接受有效的ISO8601日期。

例如:

var d = new Date(Date.parse("2012-01-11T20:49:59.415Z")); 
d.toString(); // => Wed Jan 11 2012 15:49:59 GMT-0500 (EST) 
d.getTime(); // => 1326314999415 
+0

这在旧版浏览器中不起作用。我在iOS 4.2.1和iOS 5.0.1上测试这个。 iOS 4发生故障,而iOS 5发挥作用。 – 2012-01-12 17:42:23

3
var dt = "2012-01-11T20:49:59.415Z".replace("T"," ").replace(/\..+/g,"") 
dt = new Date(dt);