是否有可以处理时区转换的 javascript 库(并考虑 DST 规则和此类内容)?我知道有类似的问题,但我所见过的似乎都没有一个真正适合我的问题的答案。
我想在 A 时区创建一个日期并能够对其进行操作(添加天数、小时数等),然后将其转换为另一个时区 B。一定有很多人需要这种功能,所以我想应该有一些我还没有找到的图书馆。
是否有可以处理时区转换的 javascript 库(并考虑 DST 规则和此类内容)?我知道有类似的问题,但我所见过的似乎都没有一个真正适合我的问题的答案。
我想在 A 时区创建一个日期并能够对其进行操作(添加天数、小时数等),然后将其转换为另一个时区 B。一定有很多人需要这种功能,所以我想应该有一些我还没有找到的图书馆。
我想你想要这个:
https://github.com/mde/timezone-js
解析器确实需要进行一些调整才能在没有该人放在一起的其他库的情况下运行(至少我上次使用它.. 五个月前?),但除此之外,这似乎是一个可靠的库。我已经在两个对时区非常敏感、流量大的商业网站上使用了它,并取得了巨大的成功。
有时它不能很好地与 jquery 的日期选择器和 momentjs(可能还有其他库)配合使用,因此请准备好调整这些库以使用 timezoneJS 的日期,或者具有 to/from 转换功能,以便您可以打开 timezonejs将日期转换为“正常”日期,反之亦然用于输入/输出。
否则,作为示例,这将采用 Asia/Singapore 时区日期并将其转换为 America/Los_Angeles 日期,同时尊重该年的夏令时。它使用免费提供的 Olson 时区文件,并将它们解析成真正准确的东西。
希望这能让你走上正确的道路。
- 编辑 -
忘记了 - 关于使用它的几个技巧。如果您有一组有限的时区,我强烈建议您通过告诉解析器仅使用这些时区来将它们取出 - 然后您不必加载所有时区的大文件。另外,我被踢了一次,因为 setHours、setMinutes 等不遵循 setHours(0, 0, 0, 0) 的 JS“规范”(即小时、分钟、秒、毫秒)。这里有一个增强请求:https ://github.com/mde/timezone-js/issues/48我不认为代码修改支持它会很困难,所以我希望我们会迟早会看到它合并..或者我可以自己做;)
Moment 现在有一个专用库:moment-timezone。您可以使用在线时区数据构建器创建自己的 tzdata 。
就像 moment 一样,它的时区对应物很轻,而且它的 API 设计得很好。
你可以看看这篇文章:如何使用 jquery 获取用户时区?
似乎您不需要任何库来转换时区。
-- 编辑(对于那些太容易阅读 Stackoverflow 上其他问题的答案的人)
您可以通过这种方式使用标准 Date 对象:
var offset = (new Date).getTimezoneOffset()/60
对于那些太容易阅读规范的人......
这将为您提供根据通用时间的小时:var hour = (new Date).getUTCHours()
这将为您提供根据当地时间的小时:var hour = (new Date).getHours()
现在明白了吗?