Javascript Date.prototype.getHours()不起作用

Javascript Date.prototype.getHours()不起作用,javascript,Javascript,铬合金v61.0.3163.100 var date = new Date("2017-11-15T04:00:00Z"); console.log(date) //Wed Nov 15 2017 04:00:00 GMT+0000 (UTC) console.log(date.getHours() === date.getUTCHours()) //true safari v11.0(12604.1.38.1.7) 为什么同一段代码在不同的浏览器中运行结果是不同的,有时在同一个浏览器中,会有

铬合金v61.0.3163.100

var date = new Date("2017-11-15T04:00:00Z");
console.log(date) //Wed Nov 15 2017 04:00:00 GMT+0000 (UTC)
console.log(date.getHours() === date.getUTCHours()) //true
safari v11.0(12604.1.38.1.7)

为什么同一段代码在不同的浏览器中运行结果是不同的,有时在同一个浏览器中,会有差异

---------更新-----------

当我回复你时,Chrome已经输出了“Wed Nov 15 2017 12:00:00 GMT+0800(CST)”,这是一个悲哀的问题。与此同时,我只吃了午饭,没有设定时区

Intl.DateTimeFormat().resolvedOptions().timeZone 

after => "America/Chicago"

befor => "China/Shanghai"(this is true)
:一个整数,介于0和23之间,表示根据当地时间给定日期的小时数


正如您在第二个示例中所看到的,时间以偏移量(+0800)存储,而在第一个示例中,时间不是(+0000)
getHours()
返回本地小时,而
getUTCHours()
是UTC小时


不同之处在于时区的浏览器存储,两者都有各自的优势。显然,您使用哪一种取决于具体情况,但区别在于偏移量(显示在字符串表示中)。

第一个示例中描述的行为对我来说没有任何意义,除非您在时区设置为UTC的机器上运行代码(您正在这样做吗?)<代码>日期对象没有时区,因此当您登录时,它显示为2017年11月15日星期三04:00:00 GMT+0000(UTC)这一事实表明发生了一些您没有告诉我们的事情。它在我的机器上的Chrome 62中生成
false
,并显示在我的本地时区。@JLRishe当我回复您时,Chrome已输出“Wed Nov 15 2017 12:00:00 GMT+0800(CST)”,这是一个令人伤心的问题。我认为这是不对的<代码>日期对象没有自己的时区,我无法在Chrome中重现OP描述的行为。我认为这里还发生了其他事情。在这两种情况下,日期都存储为UTC时间值,小时数总是根据所使用的方法计算(本地表示getHours,UTC表示getUTCHours)。浏览器不存储时区,而是从主机系统获取。在OP中获得结果的唯一方法是在运行示例之间更改系统时区,或者在具有不同时区设置的不同主机上运行它(一个设置为GMT,另一个设置为CST)。@RobG您如何解释这一差异?浏览器显然有所不同。@RobG当我回复你时,Chrome已经输出“Wed Nov 15 2017 12:00:00 GMT+0800(CST)”,这是一个悲哀的问题。与此同时,我只吃了午饭,没有设定时区。Intl.DateTimeFormat().resolvedOptions().timeZone after=>“America/Chicago”befor=>“China/Shanghai”@jhpratt显然不再是了
Intl.DateTimeFormat().resolvedOptions().timeZone 

after => "America/Chicago"

befor => "China/Shanghai"(this is true)