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

时间:2014-07-13 17:51:54

标签: javascript timezone jsfiddle dst

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

  • 在Chrome中,它始终提醒我现实生活中的时间,而不是我在操作系统中选择的时间。
  • 在Firefox中,它无法在我现实生活中的任何位置考虑DST,并在系统时间前一小时报告时间。
  • 在Safari中,它的作用类似于jsfiddle。

任何人都可以解释这些差异,并建议我如何让我的网站像jsfiddle那样行事吗?

编辑:http://jsfiddle.net/5p8tL/,与:

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

1 个答案:

答案 0 :(得分:1)

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

  • Chrome仅在首次启动时读取时区。如果您更改了系统时区,则在重新启动之前,它不会接收这些更改。

  • Windows上的Internet Explorer将在启动时读取时区,并且还会侦听来自操作系统的消息,以提醒其更改时区。我目前无法访问Mac,但我认为OSX上的Safari做了类似的事情。

  • Firefox在这方面存在问题。它似乎以某个间隔读取时区设置,因为如果您更改它们并在不重新启动的情况下进行检查,则它不会立即看到它。但最终确实如此。此外,当toLocaleStringtoString处于此不稳定状态时,时区的应用方式似乎存在差异。如果你等待一段时间,那么最终它会全部同步。 Firefox报告时区的其他一些已知问题也不正确,正如我在this blog post中描述的那样。然而,这是我第一次听说它没有在时钟本身上正确应用DST,我无法在Windows上重现它,因此它可能是Firefox-OSX特定的错误。我不会感到惊讶。

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

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

此外,您应该使用new Date()代替new Date。这是有效的,但JSLint会抱怨。 See also this post