是否有一个javascript库可以处理时区转换(并将DST规则和诸如此类的东西考虑在内)?我知道也有类似的问题,但我看到的问题似乎都没有真正符合我的问题的答案。
我想在时区a中创建一个日期,并能够对其进行操作(添加天、小时等),然后将其转换到另一个时区B。肯定有很多人需要这种功能,所以我想应该有一些我没有找到的库。
MOMENT-一个5kb的javascript日期库,用于解析、验证、操作和格式化日期。
moment().zone();这就是你想要的功能。
你也可以试用datejs,但我更喜欢即时库,它们有很好的文档,并维护美味的代码。
我想你想要这个:
https://github.com/mde/timezone-js
解析器确实需要一些调整才能在没有其他库的情况下运行(至少我上次使用它是……五个月前?),但除此之外,这似乎是一个可靠的库。我在两个时区敏感、流量高的商业网站上使用过它,并取得了巨大成功。
不过,它有时不能很好地与jquery的日期选择器和momentjs(可能还有其他库)配合使用,所以请准备好调整这些库以使用timezoneJS的日期,或者使用到/从转换函数,这样您就可以将timezoneJS的日期转换为"正常"日期,反之亦然。
否则,作为示例,这将采用亚洲/新加坡时区日期,并将其转换为美国/洛杉矶日期,同时考虑该年的夏令时。它使用免费提供的Olson时区文件,并将其解析为真正准确的文件。
希望这能让你走上正确的道路。
--编辑--
忘记了-使用它的几个技巧。如果你有一组有限的时区,我强烈建议你通过告诉解析器只使用这些时区来删除它们,这样你就不必加载所有时区的大文件。此外,我也被踢过一次,因为setHours、setMinutes等不遵循setHours(0,0,0)的JS"规范"(即小时、分钟、秒、毫秒)。这里有一个增强请求:https://github.com/mde/timezone-js/issues/48我不认为代码修改会很难支持这一点,所以我希望我们尽快看到它被合并。。或者我可以自己做;)
Moment现在有一个专用的librabry:Moment时区。您可以使用在线时区数据生成器创建自己的tzdata。
就像那个时刻一样,它的时区对应物很轻,API设计得很好。
您可以看看这篇文章:如何使用jquery获取用户时区?
似乎您不需要任何库来转换时区。
--EDIT(适用于那些太容易在Stackoverflow上阅读其他问题答案的人)
您可以这样使用标准日期对象:
var offset = (new Date).getTimezoneOffset()/60
对于那些太容易阅读规范的人来说。。。
这将根据世界时间给你一个小时:var hour = (new Date).getUTCHours()
这将根据当地时间给你一个小时:var hour = (new Date).getHours()
明白了吗?