gpt4 book ai didi

javascript - 规则和夏令时

转载 作者:行者123 更新时间:2023-11-30 19:43:01 25 4
gpt4 key购买 nike

我正在使用 rrule在我的数据库中创建和存储事件。

一切正常,直到我发现我的重复事件在 3 月 31 日之后有一个小时的差异。

在法国,我们会在这一天更改夏令时。

实际上,我的事件存储在一个 mongo 数据库中,包含事件的开始日期和持续时间,+ 最终规则(所有事件都不是重复事件),如下所示:

{
"_id" : ObjectId("5c8e4706703df43859aabbe7"),
"duration" : 2879,
"type" : "unavailability",
"title" : "Weekend",
"description" : "C'est le weekend",
"rrules" : [
{
"until" : ISODate("2021-03-22T23:00:00.000Z"),
"dtstart" : ISODate("2019-03-11T23:00:00.000Z"),
"byweekday" : [
{
"weekday" : 5
},
{
"weekday" : 6
}
],
"interval" : 1,
"freq" : 2
}
],
"__v" : 0
}

当前端在日历中搜索日期时,它将使用以下参数进行搜索:

?from=2019-03-10T23:00:00.000Z&to=2019-03-17T23:00:00.000Z

它适用于这个日期,因为两者之间没有夏令时。如果我有这个对象:

normalizedDates = { from: 2019-03-10T23:00:00.000Z, to: 2019-03-17T23:00:00.000Z }

这条规则:

{ until: 2021-03-22T23:00:00.000Z,
dtstart: 2019-03-11T23:00:00.000Z,
byweekday: [ { weekday: 5 }, { weekday: 6 } ],
interval: 1,
freq: 2 }

运行:

const recurringDays = rruleSet.between(normalizedDates.from, normalizedDates.to)

确实显示:

recurringDays [ 2019-03-23T23:00:00.000Z ]

但是如果你使用:

normalizedDates = { from: 2019-03-31T22:00:00.000Z, to: 2019-04-07T22:00:00.000Z }

规则返回:

recurringDays [ 2019-03-31T23:00:00.000Z, 2019-04-06T23:00:00.000Z ]

在我期待的时候:

recurringDays [ 2019-04-06T22:00:00.000Z ]

你知道我该如何处理吗?

最佳答案

如果您希望重复规则遵守特定时区的夏令时,那么您必须使用该时区进行安排。在您的示例中,时间表基于 UTC。

R规则提供time zone support .您应该使用它,并指定 tzid: 'Europe/Paris'

此外,您可能会考虑使用 toStringfromString 函数来处理 iCalendar 格式的字符串,并将其存储在您的 MongoDB 实例中,而不是将 RRule 序列化为 JSON。

关于javascript - 规则和夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55208658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com