首页 文章

JavaScript,时区和夏令时

提问于
浏览
6

欢迎来到本周的 Yet Another Time Zone Question 集:

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


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

  • 对于生活在美国/纽约的人来说,这是微不足道的 .

  • 这对生活在美国/洛杉矶的人来说并不太可怕(假设我的逻辑有效) .

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

但是,当我试图确定是否观察到夏令时时会发生什么 from a computer in a region that does not observe daylight savings time at all?

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

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

2 回答

  • 6

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

    mydate = new Date(longmillisFromAnotherTZ);
    

    然后使用 mydate 上的任何方法显示你如何'd like. Does this make sense? I'未能看到如何清除任何东西的日期 .

    Edit:

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

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

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

  • 4

    啊,我想我终于看到了你在说什么 . 您想根据's on the user'计算机的时间来说“纽约当前时间是 _ ”,虽然对于 setTimezone("EDT") 有支持(至少在文档中),但似乎不支持 setTimezone("America/New York") . 你'll either have to hard code the dates for when to switch between EDT and EST (based on current time GMT, which you can get from the user'的计算机),或使用第三方API(或在服务器端执行此操作) .

相关问题