Я использую rrule для создания и хранения событий в моей базе данных.
Все работало, пока я не обнаружил, что мои повторяющиеся события имели разницу в один час после 31 марта.
Во Франции это день перехода на летнее время.
На самом деле, мои события хранятся в базе данных Монго, с датой начала и продолжительностью события, + правила события (все события не являются повторяющимися событиями), например:
{
"_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 }
Rrules возвращает:
recurringDays [ 2019-03-31T23:00:00.000Z, 2019-04-06T23:00:00.000Z ]
пока я ожидаю:
recurringDays [ 2019-04-06T22:00:00.000Z ]
Вы знаете, как я мог справиться с этим?