新的日期()显示Chrome或Firefox中的不同结果

时间:2015-10-14 09:47:40

标签: javascript google-chrome date firefox

奇怪的是,不同的浏览器会在新的Date()中产生不同的结果。

在Chrome 45.0.2454.101 m:

new Date(2015,9,1)
Thu Oct 01 2015 00:00:00 GMT+0200 (W. Europe Daylight Time)

在Firefox 40.0.3中(默认检查器/控制台)

new Date(2015,9,1)
Date 2015-09-30T22:00:00.000Z

其他信息
如果我使用FIREBUG扩展控制台在Firefox中尝试,那么就像Chrome一样。 发生了什么?似乎Firefox会计算偏移量,实际上它比正确日期落后2小时。 我在其他工作站上进行了测试,所有人似乎都有这个" bug"。

2 个答案:

答案 0 :(得分:4)

如果您不想包含时区偏移量,可以使用Date.UTC

  

注意:Date被称为具有多个构造函数的构造函数   参数,指定的参数代表当地时间。如果是UTC   期望的,使用具有相同参数的新日期(Date.UTC(...))。

MDN

Firefox开发者控制台的输出:

> new Date(2015,9,1)
  Date 2015-09-30T22:00:00.000Z  // reproduces your problem, my local time is GMT+0200
> new Date(Date.UTC(2015,9,1))
  Date 2015-10-01T00:00:00.000Z // UTC time

然而,00:00:00 GMT+020022:00:00.000Z只是表示Date的字符串表示中的时区偏移的不同方式。不同之处在于打印到控制台时使用的方法:大多数浏览器使用.toString(),而Firefox使用.toISOString()。 (已编辑;之前曾声明toString方法实现不同,但并非如此。

在Chrome(Thu Oct 01 2015 00:00:00 GMT+0200)和Firefox(Date 2015-09-30T22:00:00.000Z)中,.getDate().getMonth()等方法返回相同的值(1和{{1} } 分别)。 9个对象是相同的。

答案 1 :(得分:4)

这只是调试控制台的行为。您显示的两个日期值都相同,并且是正确的值。您只是在Chrome中看到当地时间,而Firefox则选择在调试控制台中显示UTC时间。

更准确地说,Chrome,IE和大多数其他浏览器只需在对象上调用.toString(),而Firefox则调用.toISOString()

FF Screenshot

请注意,Firefox有一个错误,我们显示错误的时区名称(标准而不是日光),但您可以看到调试器值与ISO8601 UTC值匹配。