【问题标题】:Generating rrules based on certain timezones基于特定时区生成规则
【发布时间】:2018-11-13 05:32:46
【问题描述】:

假设我的应用程序的用户设置了一个重复事件。他的时区是America/Denver,所以我将它与一个确定重复发生时间的rrule 一起存储。

假设我的服务器和我的所有用户都在同一个时区,这是可行的。但是,假设我在America/PheonixAmerica/New_York 中有其他用户想要获取用户定义的此事件的发生。我需要能够使用America/Denver 时间创建事件,然后以UTC 将它们返回给用户。相反,我还需要计算America/New_York 中用户定义的重复事件并将其作为UTC 返回给用户。

是否存在一个库,我可以给它一个时区和一个rrule,并让它根据该时区的规则(比如尊重 DST)生成重复事件?或者第三方 API?

编辑:这是我的问题的一些明确性。

假设我有一个重复性事件,每周五上午 9 点发生。如果我将此事件设置在科罗拉多州,则此事件发生的时间将与亚利桑那州的时间略有不同,亚利桑那州一年中的 5 个月没有夏令时。所以在我的数据库中,我需要存储时区,并且我需要一些方法来根据该时区的规则生成事件。这是我坚持的部分,寻找一种基于时区规则生成事件的方法。

【问题讨论】:

  • 我很难理解可能需要这样做的情况。你能给我们举个例子吗?另外,将所有内容都转换为 UTC 并在那个时间执行逻辑还不够吗?
  • 我更新了 OP。我不能只将所有内容都存储为 UTC,因为如果我在当地时间上午 9 点安排活动,我必须保证所有未来的活动都在当地时间上午 9 点(如果我将其存储为 UTC,则像 DST 这样的事情会搞砸)。跨度>
  • 我想我现在明白了这个难题。你知道 javascript 中的 getTimezoneOffset() 函数吗?它应该可以帮助您解决 DST 问题。

标签: javascript node.js recurring-events rrule


【解决方案1】:

我需要一些方法来根据该时区的规则生成事件

不,你没有。 “时区规则”与事件的产生无关。 “每周五上午 9 点”的活动将全年在上午 9 点举行,无论 DST 是否有效。换句话说,您可以(并且应该)完全忽略 rrule 部分的 DST。

您唯一需要做的就是在每次出现时保留原始时区 - 日期和时间是不够的 - 然后只需在需要显示时将日期/时间即时转换为另一个时区它给不同的用户。

我之前使用过 Moment.js 和 Moment Timezone 来处理日期,但您可能还有其他选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多