RRule не устанавливает правильное время, если установлен dtstart

Я пытаюсь создать экземпляр правила и затем установить дату и время начала (dtstart), но события получают неправильное время.

  1. Я инициализирую экземпляр правила с помощью базовой строки правила: RRULE:FREQ=WEEKLY;INTERVAL=1;WKST=MO;COUNT=20
  2. Я установил дату начала в rrule.options вот так: rrule.options.dtstart = new Date(Date.UTC(2019, 1, 4, 12, 30, 0))
  3. Я console.log rrule.all() чтобы увидеть сгенерированные события. Все события теперь имеют текущее время вместо времени, установленного через dtstart. Вместо 12:30

Я сделал эту песочницу, демонстрирующую проблему.

Теперь, когда я делаю то же самое на демонстрационной странице rrule.js, я получаю правильные результаты. На этой демонстрационной странице сделайте следующее, чтобы понять, что я имею в виду:

Вот результаты:

Как видите, время событий установлено правильно!

Любой совет приветствуется!

1 ответ

Нашел ответ:

Если вы установите distart явно в конструкторе, то проблема решена.

Сравните эти примеры:

Пример первый: дает правильные результаты:

const rrule = new RRule({
  freq: RRule.WEEKLY, 
  interval: 1, 
  wkst: RRule.MO, 
  count: 20,
  dtstart: new Date(Date.UTC(2019, 1, 4, 12, 30, 0))})

Пример второй: дает неверные результаты

const rrule = new RRule({
  freq: RRule.WEEKLY, 
  interval: 1, 
  wkst: RRule.MO, 
  count: 20})
rrule.options.dtstart = new Date(Date.UTC(2019, 1, 4, 14, 30, 0));

Для меня это выглядит немного противоречиво, потому что установка dtstart всегда должна давать один и тот же результат, независимо от того, устанавливаете ли вы его в конструкторе или устанавливаете его позже.

Другие вопросы по тегам