JSFiddle报告的时间与浏览器不同



当我在jsFiddle中运行var d = new Date; alert(d.toLocaleString())时,或者在w3Schools"尝试编辑器"中,它能够检测到我设置计算机的位置并报告该位置的正确时间(或者至少,我在页面加载时选择的那个),考虑到它的时区以及它是否使用夏令时。getTimezoneOffset()方法还报告我所选位置的正确偏移量。然而,当我在我的网页中使用这个javascript并离开浏览器来解释它时,我得到了不同的浏览器行为:

  • 在Chrome中,它总是提醒我现实生活中位置的时间,而不是我在操作系统中选择的时间。
  • 在Firefox中,除了我实际生活的地方,它没有考虑到任何地方的夏令时,并且报告的时间比我的系统时间早一小时。
  • 在Safari中,它的工作原理类似jsfiddle。

谁能解释这些差异,并建议我如何才能让我的网站表现得像jsfiddle一样?

edit: http://jsfiddle.net/5p8tL/, vs:

<html>
<body>
<script>
     var d = new Date;
     alert(d.toLocaleString());
</script>
</body>
</html>

您看到的差异可能是由于每个浏览器从系统读取时区设置的方式。

  • Chrome仅在第一次启动时读取时区。如果您更改了系统时区,它将不会接收这些更改,直到重新启动。

  • Windows上的Internet Explorer将在启动时读取时区,并侦听来自操作系统的提醒其时区更改的消息。我现在没有Mac电脑,但我认为OSX上的Safari也有类似的功能。

  • Firefox在这方面有很多bug。它似乎每隔一段时间读取时区设置,因为如果您更改它们并在不重新启动的情况下进行检查,它不会立即看到它。但最终还是会发生。此外,当toLocaleStringtoString处于这种状态时,在如何应用时区方面似乎存在差异。如果你等一段时间,最终会同步的。Firefox报告时区错误还有其他一些已知的问题,正如我在这篇博文中所描述的那样。然而,这是我第一次听说它不能正确地在时钟上应用夏令时,我无法在Windows上重现,所以这可能是Firefox-OSX特有的错误。我不觉得奇怪。

无论如何,在更改时区后完全重新启动浏览器可能是一个好主意。

至于为什么你在jsFiddle中看不到与你在自己的网页上相同的行为-我不知道。原则上,这没有任何意义。它们应该有相同的行为。也许这些实例正在重新启动,而其他实例没有?只是猜测。

另外,您可能应该使用new Date()而不是new Date。这是有效的,但是JSLint会抱怨。参见这篇文章。

相关内容

  • 没有找到相关文章