关于时区:JavaScript,时区和夏令时

JavaScript, time zones, and daylight savings time

欢迎来到本周的另一个时区问题:

我读了不少书,试图操纵moment.js和date.js来帮助我,从我开始尝试解决这个问题以来,我一直感到很沮丧,所以如果有人能帮我解决这个重复的问题,让我无法找到,那就太棒了。

我有一页。此页显示一系列时间,例如:7:28、7:38、7:48。我知道这些是不是上午/下午。这些时间总是美国/纽约(夏令时变化时不会改变,因为它们对应的事件总是发生在该时间,而不管DST如何)。让我们称之为时间表。我想强调下一个时间。

  • 这对居住在美国/纽约的人来说是微不足道的。
  • 这对居住在美国/洛杉矶的人来说并不太可怕(假设我的逻辑可行)。
    • 我可以利用美国/洛杉矶计算机的当前时间,将其转换为UTC,然后确定美国/洛杉矶当前是否遵守DST,并确定美国/纽约应为-0400还是-0500,将其应用于UTC,并进行比较。这有点伤人,因为你总是在处理一个基于美国/洛杉矶的日期,而实际上并没有改变日期对象的时区,但是我有一个可靠的方法从UTC时间向后(或向前)滚动小时。

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

据我所知,javascript将只为当前时区创建日期对象,然后根据该日期对象来确定DST。

我应该不在乎吗?不管怎样,《纽约时报》主要与居住在美国/纽约的人们有关。我只是在尝试构建一个应用程序,当从另一个时区查看时,它是有意义的,当它在没有夏令时的国家凌晨3点,在美国/纽约的下午2点,"时间表"强调的是,下午2:05的事情即将发生,而不是凌晨3:05的事情。


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

1
mydate = new Date(longmillisFromAnotherTZ);

然后在mydate上使用任何方法来显示您想要的日期。这有道理吗?我看不出有什么问题。不过,我很乐意把事情弄清楚。

编辑:

只是要100%清楚…

如果两个不同的客户机需要在不同的时区相互显示其操作,我建议您只使用(new Date()).getTime()中的值,然后将其保存到服务器。然后服务器将这个值发送到每个相应的客户机。然后,客户机负责将其显示在自己适当的区域设置中。

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


啊,我想我终于明白你在说什么了。你想说的是,"纽约市目前的时间是基于用户电脑上的时间",虽然支持(至少在文档中)setTimezone("EDT"),但似乎没有支持setTimezone("America/New York")。您将不得不硬编码在EDT和EST之间切换的日期(基于从用户计算机上获得的当前格林威治标准时间),或者使用第三方API(或在服务器端执行此操作)。