来自字符串的Firefox new Date()在本地时区构建时间

时间:2012-01-30 11:06:21

标签: javascript date timezone

我正在尝试从字符串创建日期对象。 我得到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在本地时区考虑。

除了在任何地方检查用户代理之外,是否有任何通用方法可以绕过它?

3 个答案:

答案 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}},则无法保证输出格式。即使在一台计算机中,不同的浏览器也会使用不同的本地化格式。