Я читаю RFC 5545 и пытаюсь определить, как правильно найти набор вхождений. Скажем, у меня ЕЖЕНЕДЕЛЬНОЕ правило = 2 (раз в две недели). Я также указал часть правила BYDAY для Вт, Ср, Чт. Предположим, моя дата начала - 2011-04-07 (чт), а моя дата окончания - 2011-04-27 (среда). Очевидно, игнорируя менее значимые, чем дата, я бы подумал, что мой набор вхождений будет содержать: 2011-04-07, 2011-04-12, 2011-04-13, 2011-04-21, 2011-04-26, 2011-04- 27.
Что меня сбивает с толку, так это заявление из RFC: «Часть правила WKST определяет день начала рабочей недели. Допустимые значения: MO, TU, WE, TH, FR, SA и SU. Это важно, когда ЕЖЕНЕДЕЛЬНО "RRULE" имеет интервал больше 1, и указана часть правила BYDAY. "
Итак, если мой WKST = MO, я вижу следствие из приведенного выше утверждения, что неделя начинается не с даты начала, а с WKST. Это означает, что вместо того, чтобы использовать неделю, основанную на дате начала, в данном случае, четверг-среда, мне нужно фактически начать с WKST и определить, какие события попадают в ЭТУ неделю (пн-вс) и каждую вторую неделю с ЭТОГО WKST . Итак, для целей расчета моей датой начала будет 2011-04-04. Это происходит до даты начала, поэтому я перехожу к дате начала, но придерживаюсь недели с понедельника по воскресенье. Это означает, что мой набор вхождений на самом деле: 2011-04-07, 2011-04-19, 2011-04-20, 2011-04-21. Это сильно отличается от моего оригинального набора.
Вдобавок, ЕСЛИ это правильный способ расчета, означает ли это, что при расширении ситуаций правил для других частот с интервалами> 1 я должен "начинать" в начале этого периода, а не в дату начала. ЕЖЕМЕСЯЧНО охватывает 1 - последний день месяца с даты начала. ГОД включает 1 января - 31 декабря года даты начала?
Я надеюсь, что там есть гуру iCalendar ... Я не могу понять здесь логику. Спасибо.
ОБНОВЛЕНИЕ: я создал несколько файлов .ics и импортировал их в календарь Google. Предполагая, что Google интерпретирует их правильно, я могу подтвердить, что при расширении MONTHLY с INTERVAL> 1 будет использоваться с 1-го по последний день месяца, а НЕ месяц, начиная с даты начала события. ГОДОВЫЕ правила действуют таким же образом, год длится с 1 января по 31 декабря. Не то, что я ожидал изначально, но, надеюсь, это поможет кому-то другому.