我正在尝试从字符串创建日期对象。 我得到ISO格式的日期,除了毫秒部分,如“2012-01-30T16:23:12”
当我在IE,Chrome和Firefox中运行以下代码时,结果会有所不同 (Link to Fiddle)
currentDate = "2012-01-30T16:23:12";
var date = new Date(currentDate);
alert(date);
IE和Chrome将字符串视为UTC,但firefox在本地时区考虑。
除了在任何地方检查用户代理之外,是否有任何通用方法可以绕过它?
答案 0 :(得分:12)
您可以尝试为UTC添加零时区偏移+00:00
:
currentDate = "2012-01-30T16:23:12+00:00";
这有帮助吗? (对不起,如果没有实际更改我的时区,我无法测试。)
答案 1 :(得分:3)
嗯,可能的解决方法是解析字符串并使用方法。
setUTCDate()
setUTCFullYear()
setUTCHours()
可能有更好的解决方案
答案 2 :(得分:0)
如果采用当前格式,则无法保证输入将被正确解析。 Date.parse()例程只需要解析特定格式的字符串 - 解析其他格式是依赖于实现的。如果您敢于依赖满足要求的实现,请添加数据以符合特定格式:
new Date(currentDate + '.000Z')
或者,使用可以解析当前格式的数据的库,例如jQuery或Globalize.js。
类似的考虑也适用于写日期。如果您明确使用Date.toString()
或alert(date)
使用{{1}},则无法保证输出格式。即使在一台计算机中,不同的浏览器也会使用不同的本地化格式。