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

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

  1. Я инициализирую экземпляр rrule базовой строкой rrule: RRULE:FREQ=WEEKLY;INTERVAL=1;WKST=MO;COUNT=20
  2. Я установил дату dtstart в 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 , Я получаю правильные результаты. На этой демонстрационной странице сделайте следующее, чтобы понять, что я имею в виду:  введите описание изображения здесь

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

введите описание изображения здесь

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

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


person Dany Dhondt    schedule 04.02.2019    source источник


Ответы (1)


Нашел ответ:

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

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

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

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 всегда должна давать один и тот же результат, независимо от того, устанавливаете ли вы его в конструкторе или устанавливаете позже.

person Dany Dhondt    schedule 04.02.2019
comment
Спасибо, ты спас меня из очень большой кроличьей норы, в которую я проваливался. - person Petros Kyriakou; 13.12.2019