我有以下行,它在FF和Chrome中生成有效的时间戳:
new Date('2012 11 2 00:00:00 GMT').getTime();
然而,在IE9中,我得到了NaN。需要采取哪些不同的方式才能使这一行与浏览器兼容?
答案 0 :(得分:1)
您使用的日期格式应符合EMCAscript规范,因此Firefox和Chrome对解析更为宽容。
格式应为:
YYYY-MM-DDTHH:mm:ss.sssZ
所以试试这个:
new Date('2012-11-02T00:00:00.000Z').getTime()
这在旧版本的IE中无效。如果您需要完全兼容性,请参阅另一个答案。
答案 1 :(得分: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]));
}
生成的日期对象将根据客户端的系统设置具有时区偏移量,该设置应该是正确的,但可能不是。