【问题标题】:Fullcalendar recurring event is shifted for the day beforeFullcalendar 重复事件被转移到前一天
【发布时间】:2021-12-28 07:26:23
【问题描述】:

这就是我们现在的情况。用户位于太平洋时区并希望创建重复事件:

  • 开始日期:11/22/2021
  • 结束日期:11/29/2021
  • 开始时间:下午 6:30
  • 结束时间:晚上 8:30
  • 循环日:周一、周四
  • 频率:每周

Fullcalendar timeZone 设置为“本地”,我们正在将时间转换为 UTC。因此,当我们转换用户输入时,我们创建了这样的 rrule 对象:

"rrule": {
    "freq": 2,
    "interval": 1,
    "byweekday": [
        0,
        3
    ],
    "dtstart": "2021-11-23T02:30:00Z",
    "until": "2021-11-30T04:30:00Z"
}

但是事件被推迟了一天:事件在周日和周三重复,而不是周一和周四。

当我们创建 PT 时间和 UTC 时间“在同一天”的事件时(例如,从下午 3 点到下午 4 点),一切都很好。

此外,当我们从下午 6:30 到晚上 8:30 创建非重复事件时,一切都很好。

Fullcalendar 版本是 5.9.0,rrule 版本是 2.6.8。

我们缺少什么?

【问题讨论】:

    标签: javascript timezone fullcalendar fullcalendar-5 rrule


    【解决方案1】:

    您已指定事件在指定日期范围内的每周一和周四在02:30:00Z 发生。

    请注意,这是 UTC 时间的星期一和星期四。

    在太平洋时间,02:30:00Z 是前一天的18:30:00。因此,在 UTC 时间的星期四早上重复发生的事件实际上会在太平洋时间的星期三晚上发生。

    根据所提供的数据,fullCalendar 所做的事情是完全正确和合乎逻辑的。

    我认为您的问题可能出在哪里,当您收到来自用户的此重复事件请求并将日期和时间转换为 UTC 时,您没有考虑该时区更改是否也会在逻辑上影响指定的重复日期。例如我假设在上述情况下,您希望将重复日期提前一天,因为 UTC 转换会导致时间转移到第二天。

    这取决于您希望它如何工作,显然我目前看不到您如何执行转换过程,因此我必须将实现细节留给您。

    【讨论】:

    • 这解释了很多。我们不确定这是否是正确的日历行为。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2017-11-27
    • 1970-01-01
    相关资源
    最近更新 更多