您看到的差异可能是由于每个浏览器从系统中读取时区设置的方式造成的。
-
Chrome仅在首次启动时读取时区。如果您更改了系统时区,则在重新启动之前,它不会接收到这些更改。
-
Windows上的Internet Explorer将在启动时读取时区,并侦听来自操作系统的消息,提醒它时区正在更改。我目前无法访问Mac,但我认为OSX上的Safari也有类似的功能。
-
Firefox在这方面有缺陷。它似乎每隔一段时间就会读取时区设置,因为如果您更改它们并在不重新启动的情况下进行检查,它不会立即看到。但最终它还是成功了。此外,时区的应用方式似乎也存在差异
toLocaleString
和
toString
当它处于这种边缘状态时。如果你等待一段时间,那么最终它都会同步。Firefox报告时区错误还存在其他一些已知问题,正如我在
this blog post
。然而,这是我第一次听说它没有在时钟本身上正确应用DST,而且我无法在Windows上复制它,所以它可能是Firefox OSX特有的错误。这不会让我惊讶。
无论如何,在更改时区后完全重新启动浏览器可能是个好主意。
至于为什么你在jsFiddle中看不到和你在自己的网页上一样的行为,我不知道。原则上,这没有任何意义。他们应该有相同的行为。也许这些实例正在重新启动,而其他实例没有重新启动?只是猜测。
此外,您可能应该使用
new Date()
而不是
new Date
。这是有效的,但JSLint会投诉。
See also this post
.