JavaScript,时区和夏令时

Aar*_*ron 6 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的事情.

JP *_*son 6

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

mydate = new Date(longmillisFromAnotherTZ);
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

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

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


Ben*_*aum 5

啊,我想我终于明白你在说什么了。您想说的是,“纽约市的当前时间是_ ”,基于用户计算机上的时间,虽然有支持(至少在文档中),但setTimezone("EDT")似乎不支持setTimezone("America/New York"). 您必须对何时在 EDT 和 EST 之间切换的日期进行硬编码(基于当前时间 GMT,您可以从用户的计算机获取),或者使用第 3 方 API(或在服务器端执行此操作) 。