Javascript 节俭

Javascript 节俭,javascript,node.js,dst,rrule,Javascript,Node.js,Dst,Rrule,我正在使用在数据库中创建和存储事件 所有这些都在起作用,直到我发现我重复发生的事件与3月31日相差一小时 在法国,这是我们进行夏令时转换的日子 事实上,我的事件存储在mongo数据库中,事件的开始日期和持续时间+事件(所有事件都不是重复事件)如下所示: { "_id" : ObjectId("5c8e4706703df43859aabbe7"), "duration" : 2879, "type" : "unavailability", "title" : "We

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

所有这些都在起作用,直到我发现我重复发生的事件与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

Rulle提供。您应该使用它,并指定
tzid:“欧洲/巴黎”


也可以考虑使用<代码> toStudio和 FraseS> <代码>函数来处理ILIDENAR格式的字符串,并将其存储在MunGDB实例中,而不是将RRealRead作为JSON。< /P> HI序列化,谢谢您的回答。你认为这是一条路吗?对于

toString
fromString
函数,您肯定有一个点