Как использовать EXDATE в полном календаре через объектную опцию

В этом ответе показано, как включите EXDATE в параметр формата строки в FullCalendar.

Но FullCalendar предоставляет удобную альтернативу длинной строке. Вместо этого они позволяют использовать объект. К сожалению, их документация на самом деле не охватывает ничего, кроме этого:

Свойство rrule принимает все, что принимает библиотека rrule для нового RRule. См. Документы. Вы можете указать строку или объект.

События, которые мы используем, уже довольно тяжелые, и я бы хотел избежать добавления дополнительных сложностей, которые потребовали бы написания какого-то сопоставителя для генерации этой строки.

Я хотел бы знать, как можно исключить список дат из правила повторения, используя формат объекта.

Я пробовал предоставить объект даты на конкретную дату. Я пробовал предоставить строку ISO. Я пробовал включать их в массив.

Обновлять

Это последняя итерация, которую я пробую:

...
 const rruleSet = new RRuleSet();

 rruleSet.rrule(new RRule(options));
 // Repeat every day except on Nov 22, 2019
 rruleSet.exdate(new Date(Date.UTC(2019, 10, 22)));

 event.duration = {
    seconds: event.event_length,
 };

 event.rrule = rruleSet.toString();
...

Это отображает повторяющиеся даты (время немного отличается), но дата, которую я пытаюсь исключить, все еще отображается.


person Philll_t    schedule 22.11.2019    source источник
comment
Вы напрямую обращались к какой-либо документации по правилам? Можем ли мы посмотреть, что вы пробовали, а также пример некоторых входных данных и ожидаемого результата. Спасибо.   -  person ADyson    schedule 22.11.2019
comment
Спасибо, обновил описание.   -  person Philll_t    schedule 22.11.2019
comment
Я опубликовал решение ниже, было ли оно полезно?   -  person ADyson    schedule 25.11.2019
comment
@ADyson, спасибо! Это исправило это. См. Комментарий под его ответом для некоторых деталей.   -  person Philll_t    schedule 26.11.2019


Ответы (1)


Чтобы ваше правило исключения соответствовало сгенерированному событию, вы также должны указать конкретное время. Я полагаю, это потому, что если бы у вас были события, повторяющиеся несколько раз в день, он не знал бы, какое из них вы пытаетесь исключить.

(Если бы ваши мероприятия были событиями в стиле «весь день» без определенного времени начала, тогда можно было бы установить только дату в exdate.)

Поэтому изменение

rruleSet.exdate(new Date(Date.UTC(2019, 10, 22)));

to

rruleSet.exdate(new Date(Date.UTC(2019, 10, 22, 10, 30)));

решит вашу проблему

Демо: https://codepen.io/ADyson82/pen/jOORaOZ

person ADyson    schedule 22.11.2019
comment
В итоге мне пришлось использовать это здесь. Оказывается, объект предназначен только для опционов. При любой сложности помимо этого вам потребуется использовать класс rruleset для генерации строки. - person Philll_t; 26.11.2019
comment
@Philll_t да, похоже, что fullCalendar по какой-то причине принимает только объекты RRule, а не объекты RRuleSet, но он примет строку, содержащую все возможные параметры от обоих. Понятия не имею, почему это так. Рад, что это все равно помогло тебе - person ADyson; 26.11.2019