JavaScript,时区和夏令时

时间:2012-03-03 04:54:14

标签: javascript timezone dst

欢迎阅读本周又一个时区问题的一集:

我已经对SO做了一些阅读,试图操纵moment.js和date.js来帮助我,并且自从我开始尝试解决这个问题以来,一般都被一种沮丧的感觉所困扰,所以如果有人能够帮助或指出我在SO上的重复问题,我一直无法找到,这太棒了。


我有一个页面。此页面显示一系列时间,例如:7:28,7:38,7:48。我知道这些是AM / PM。这些时间总是美国/纽约(当夏令时变化时,它们不会改变,因为它们对应的事件总是发生在那个时候,无论DST如何)。我们称他们为时间表。我想强调接下来的时间。

  • 对于生活在美国/纽约的人来说,这是微不足道的。
  • 这对于生活在美国/洛杉矶的人来说并不太可怕(假设我的逻辑有效)。
    • 我可以将美国/洛杉矶的计算机当前时间转换为UTC,然后确定美国/洛杉矶目前是否正在观察夏令时,并确定美国/纽约是否应该是-0400或-0500 ,将其应用于UTC,并进行比较。这有点伤害,因为你仍然总是处理美国/洛杉矶的日期而不是实际更改Date对象的时区,但我有一个可靠的方法来回退(或转发)UTC的小时数时间。

然而,当我尝试确定是否从一个不遵守夏令时的地区的计算机中观察到夏令时时,会发生什么?

根据我的知识,JavaScript只会为当前时区创建Date对象,然后根据该Date对象进行DST的任何确定。

我应该不在乎吗?时代主要仅与生活在美国/纽约的人有关。我只是试图建立一个从另一个时区观看时有意义的应用程序,这样当它在country_without_DST的3AM以及它在美国/纽约的下午2点时,'时间表'突出显示下午2:05的事情即将发生,不是凌晨3点05分。

2 个答案:

答案 0 :(得分:6)

所有与时间的比较都应该使用您实例的getTime()。这将返回自UTC纪元以来的毫秒数。 DST无所谓。您将getTime()值发送到您的服务器。然后,您的客户端脚本会将此值转换回JavaScript Date对象,如下所示:

mydate = new Date(longmillisFromAnotherTZ);

然后使用mydate上的任何方法显示您喜欢的日期。这有意义吗?我没有看到问题是怎么回事。我很乐意清除任何事情。

修改

只是100%明确......

如果两个不同的客户需要在不同的时区显示彼此的操作,我建议您仅使用(new Date()).getTime()中的值,然后将其保存到服务器。然后,服务器将此值发送给每个相应的客户端。然后,客户端负责以自己适当的语言环境显示它。

另外,如果你想要一个适合获取时区和偏移量的库,getTimezoneOffset()已知很好,你应该看看这个库:http://www.pageloom.com/automatic-timezone-detection-with-javascript

答案 1 :(得分:4)

啊,我想我终于看到了你在说什么。您想根据用户计算机上的时间来说“纽约当前时间 _ ”,并且setTimezone("EDT")支持(至少在文档中)似乎没有对setTimezone("America/New York")的支持。您要么必须硬编码何时在EDT和EST之间切换的日期(基于当前时间GMT,您可以从用户的计算机获得),或使用第三方API(或在服务器端执行此操作)