Как сгенерировать RRULE для повторяющихся событий с несколькими значениями BYSETPOS?

Я пытаюсь определить RRULE для события, которое происходит в первый и второй понедельник и вторник каждого месяца. Это будет равно четырем событиям в месяц. Я думал, что это правильно:

FREQ=MONTHLY;INTERVAL=1;BYSETPOS=1,2;BYDAY=MO,TU

Но он генерирует вхождения только для первого понедельника/вторника каждого месяца. Если я удалю вторник, он будет генерировать вхождения как для первого, так и для второго понедельника месяца. Почему я не могу указать несколько значений BYSETPOS (поскольку спецификация RRULE кажется разрешить) вместе с несколькими значениями BYDAY?

Как правильно определить такое правило, если ясно, что это неправильный путь?

Очевидно, я не совсем понимаю свойство BYSETPOS.
В приведенном выше документе говорится:

bysetpos - Если указано, это должно быть либо целое число, либо последовательность целых чисел, положительных или отрицательных. Каждое заданное целое число будет указывать номер вхождения, соответствующий n-му вхождению правила в периоде частоты. Например, значение bysetpos, равное -1, в сочетании с частотой MONTHLY и днем ​​недели (MO, TU, WE, TH, FR) приведет к последнему рабочему дню каждого месяца.

Поэтому я подумал, что правильно использовать BYSETPOS для указания желаемых вхождений в периоде частоты (в виде последовательности целых чисел).

Спасибо за ваше руководство.


person Ryan Griggs    schedule 18.07.2018    source источник


Ответы (1)


Как правильно определить такое правило

Просто так: BYDAY=1MO,1TU,2MO,2TU

Соответствующая цитата из RFC 5545:

  Each BYDAY value can also be preceded by a positive (+n) or
  negative (-n) integer.  If present, this indicates the nth
  occurrence of a specific day within the MONTHLY or YEARLY "RRULE".

  For example, within a MONTHLY rule, +1MO (or simply 1MO)
  represents the first Monday within the month, whereas -1MO
  represents the last Monday of the month.

Почему я не могу указать несколько значений BYSETPOS (как, кажется, позволяет спецификация RRULE) вместе с несколькими значениями BYDAY?

Вы можете - на самом деле вы указали 2 с BYSETPOS=1,2. Вы просили 1-й и 2-й результаты. Но вы хотите получать 4 вхождения в месяц (первый понедельник, первый вторник, второй понедельник, второй вторник), поэтому вам следует указать 4 вхождения, если вы действительно хотите использовать BYSETPOS : BYSETPOS=1,2,3,4. Я не рекомендую BYSETPOS, хотя BYDAY намного понятнее и проще для понимания.

person rlanvin    schedule 18.07.2018