奇怪的是,不同的浏览器会在新的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"。
答案 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+0200
和22: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)