2012-11-02 42 views
0

我有以下线,生成FF和Chrome有效的时间戳:IE9 Date对象处理

new Date('2012 11 2 00:00:00 GMT').getTime(); 

然而,在IE9中,我得到NaN的。为了让这条线能够跨浏览器兼容,需要做什么不同的事情?

+0

可能的重复[如何将字符串转换为日期时间格式规范在JavaScript?](http://stackoverflow.com/questions/476105/how-can-i-convert-string-to-datetime-with- format-specification-in-javascript) –

回答

1

您使用的日期格式应符合EMCAscript规范,只是Firefox和Chrome更容易理解分析。

格式应该是:

YYYY-MM-DDTHH:mm:ss.sssZ 

那么试试这个:

new Date('2012-11-02T00:00:00.000Z').getTime() 

这将无法工作在旧版本的IE。如果您需要完全兼容性,请参阅其他答案。

+0

MDN不是权威,[ECMA-262](http://ecma-international.org/ecma-262/5.1/#sec-15.9.1.15)是。并非所有的浏览器都支持指定的ISO格式,而且这些格式不一致。更好地手动分析日期字符串。 – RobG

+0

ISO格式在较早版本的IE中失败。手动解析日期是在广泛使用的浏览器中获得一致结果的唯一方法。 – RobG

+0

@RobG真的,但他在问题中说IE9。为了清晰起见,我会添加一个注释。 – loganfsmyth

1

将字符串转换为日期的唯一可靠方法是手动解析它。你可以使用一个库,但是无论你使用什么,你都必须知道这个格式,所以通常只需要自己做就可以了。

在“2012 11月2日00:00:00 GMT”(这是不符合ISO8601,因此分析是依赖于实现)的情况下,如果时区为UTC总,你可以使用:

function stringToDate(s) { 
    var b = s.split(/\D/); 
    return new Date(Date.UTC(b[0], --b[1], b[2], b[3], b[4], b[5])); 
} 

生成的日期对象将根据客户端的系统设置有一个时区偏移量,这应该是正确的,但可能不是。