В настоящее время я пытаюсь настроить собственный iCalendar, на который я могу подписаться, так как не хочу зависеть от сторонних сервисов.
Я сейчас пытаюсь сделать VEVENT
на Рождество. Второе, третье и четвертое пришествие, а также рождественские каникулы не заставят себя ждать, однако у меня есть большие проблемы с моделированием первого пришествия.
В частности, проблема в том, что первое появление может быть в ноябре и декабре (с 27 ноября по 3 декабря)
Как я могу сделать повторяющееся событие (или, точнее, RRULE
), чтобы охватить все случаи для 1-го появления?
Что я пробовал
Моя первая идея была такой:
FREQ=YEARLY;INTERVAL=1;BYMONTH=11,12;BYMONTHDAY=27,28,29,30,1,2,3;BYDAY=SU
Идея состояла в том, чтобы просто выбрать одно воскресенье между 27 ноября и 3 декабря. Это, конечно, не работает, потому что BYMONTH
расширяет поиск до всех дней в ноябре и декабре, а BYMONTHDAY
ограничивает поиск теми днями в обоих месяцах. То есть 1 ноября, 2 ноября ... 27 декабря, 28 декабря ..., что, конечно, не то, чего я хочу.
Далее я попытался использовать BYYEARDAY=331,332,333,334,335,336,337
вместо BYMONTHDAY
и BYMONTH
, но, к сожалению, мой сервер webdav (Nextcloud, который, насколько мне известно, использует Sabre. Я получил сообщение об ошибке «Недопустимое правило BYYEARDAY») не поддерживает это.
Моя следующая идея состояла в том, чтобы использовать несколько RRULE
с - по крайней мере, я не видел ни одного отрывка в RFC, утверждающего, что допускается самое большее только один RRULE
. Итак, я закончил с:
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=SU;BYMONTHDAY=27,28,29,30;BYMONTH=11
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=SU;BYMONTHDAY=1,2,3;BYMONTH=12
Не сработало. Моим последним средством было создание двух отдельных VEVENT
, один с первым RRULE
выше и один со вторым RRULE
выше, но в остальном идентичный. Это сработало, но смутило меня.
Нет лучшего решения? Как бы вы это сделали?