【问题标题】:JavaScript library that handles time zone conversion处理时区转换的 JavaScript 库
【发布时间】:2012-11-11 08:27:47
【问题描述】:

是否有可以处理时区转换(并考虑 DST 规则等)的 javascript 库?我知道有类似的问题,但我所见过的似乎都没有一个真正适合我的问题的答案。

我想在 A 时区创建一个日期并能够对其进行操作(添加天数、小时数等),然后将其转换为另一个时区 B。一定有很多人需要这个某种功能,所以我想应该有一些我还没有找到的库。

【问题讨论】:

  • 是吗?我同意,如果我知道如何指定 Date 对象处于特定时区,这应该足以在时区之间进行转换。但我不知道有什么方法可以做到这一点。
  • js-joda.github.io/js-joda 从技术上讲,这个问题超出了范围(软件建议),因此发表了评论。 Joda 很难使用,但我记得它正确地做了一些 Moment 失败的事情。

标签: javascript date time timezone


【解决方案1】:

你可以看看这个帖子:How to get user timezone using jquery?

看来你不需要任何库来转换时区。

-- 编辑(对于那些太容易阅读 Stackoverflow 上其他问题的答案的人)

您可以这样使用standard Date object

var offset = (new Date).getTimezoneOffset()/60

对于那些太容易阅读规范的人......

这将根据通用时间为您提供小时:var hour = (new Date).getUTCHours() 这将根据当地时间为您提供小时:var hour = (new Date).getHours()

现在明白了吗?

【讨论】:

  • 我看不到那篇文章如何解决我的问题。如果有,请赐教。
  • 您似乎可以操纵日期,即使仅使用“日期”对象支持时区也是如此。看看这个:w3schools.com/jsref/jsref_obj_date.asp
  • 时区(例如 America/Los_Angeles)用于日历应用程序,因为事件是按当地时间安排的。无论当天的时区偏移量是多少(更改夏令时规则等),事件发生的本地时间都必须保持不变。对于这些应用程序,我们经常需要将时区+本地时间转换为通用时间,反之亦然。
  • 是的,你是对的!但只是一个问题......这个评论的目的是什么?
  • 我猜这个页面上没有人点击我发布的链接。如果你去阅读How to get user timezone using jquery? 上的答案,你会发现答案实际上是:var offset = (new Date()).getTimezoneOffset() 等等...... 你不需要任何库来获取它
【解决方案2】:

Moment 现在有一个专用库:moment-timezone。 您可以使用 online timezone data builder 创建自己的 tzdata。

就像 moment 一样,它的时区对应物很轻,而且它的 API 设计得很好。

【讨论】:

  • moment-timezone.js 需要 moment.js 和时区数据。 Moment Timezone 的文档列出了您需要的 .js 文件。
【解决方案3】:

我想你想要这个:

https://github.com/mde/timezone-js

解析器确实需要一些调整才能在没有该人放在一起的其他库的情况下运行(至少我上次使用它.. 五个月前?),但除此之外,这似乎是一个可靠的库。我已经在两个对时区非常敏感、流量大的商业网站上使用了它,并取得了巨大的成功。

它有时不能很好地与 jquery 的日期选择器和 momentjs(可能还有其他库)配合使用,因此请准备好调整这些库以使用 timezoneJS 的日期,或者具有 to/from 转换功能,以便您可以将 timezonejs 日期转换为“正常”日期,反之亦然用于输入/输出。

否则,作为示例,这将采用亚洲/新加坡时区日期并将其转换为美国/洛杉矶日期,同时尊重该年的夏令时。它使用免费提供的 Olson 时区文件,并将它们解析成真正准确的东西。

希望这能让你走上正确的道路。

--编辑--

忘记了 - 关于使用它的几个提示。如果您有一组有限的时区,我强烈建议您通过告诉解析器仅使用这些时区来将它们取出 - 然后您不必加载所有时区的大文件。另外,我被踢了一次,因为 setHours、setMinutes 等不遵循 setHours(0, 0, 0, 0) 的 JS“规范”(即小时、分钟、秒、毫秒)。这里有一个增强请求:https://github.com/mde/timezone-js/issues/48 我认为代码修改支持它一点都不困难,所以我希望我们能尽快看到它合并.. 或者我可能会这样做我自己;)

【讨论】:

    【解决方案4】:

    MOMENT - 一个 5kb 的 JavaScript 日期库,用于解析、验证、操作和格式化日期。

    时刻().zone();这是您想要的功能。

    你也可以试试datejs,不过我更喜欢moment library,他们有很好的文档,并且维护了美味的代码。

    【讨论】:

    • 我一定是做错了什么,我已经包含了这样的 MOMENT <script type='text/javascript' src="http://momentjs.com/downloads/moment-timezone.js"></script> 但是我收到一个错误:Uncaught ReferenceError: moment is not defined
    • @NaguibIhab,查看 Moment Timezone 的文档。他们列出了您需要的 .js 文件。
    • 当您包含所有必需的文件时,我看到这远远超过 5KB。
    • 那是两年前的事了
    • 目前超过 16k。英国媒体报道。
    猜你喜欢
    • 1970-01-01
    • 2015-10-14
    • 2017-03-17
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2011-04-22
    相关资源
    最近更新 更多