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

Kre*_*ker 5 javascript firefox google-chrome date

奇怪的是,在不同的浏览器中为新的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)
Run Code Online (Sandbox Code Playgroud)

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

new Date(2015,9,1)
Date 2015-09-30T22:00:00.000Z
Run Code Online (Sandbox Code Playgroud)

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

paw*_*wel 5

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

注意:当 Date 作为具有多个参数的构造函数被调用时,指定的参数代表本地时间。如果需要 UTC,请使用具有相同参数的 new Date(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
Run Code Online (Sandbox Code Playgroud)

但是,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) 方法中,like.getDate().getMonth()return 相同的值(分别是19)。该Date对象是相同的。


Mat*_*int 4

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

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

FF 截图

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