rrule для получения 2-го понедельника, среды и пятницы месяца, для каждого месяца

#fullcalendar #rrule

#полный календарь #rrule

Вопрос:

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

Вот rrule, которое я пробовал

ПРАВИЛО: FREQ = ЕЖЕМЕСЯЧНО; COUNT = 10; INTERVAL = 1; WKST = SU;BYDAY = MO, WE, FR;BYSETPOS=2

 events: [{
          title: 'rrule event',
          rrule: {
           freq: RRule.MONTHLY,
               count: 10,
               interval: 1,
               wkst: RRule.SU,
               byweekday: [RRule.MO, RRule.WE, RRule.FR],
               bysetpos: [2]
            },
            duration: '02:00',
        rendering: 'inverse-background'
         }
        ],
  

Это то, что я получаю

 1   Fri,    03  May 2019    12:33:53    GMT
2   Wed,    05  Jun 2019    12:33:53    GMT
3   Wed,    03  Jul 2019    12:33:53    GMT
4   Mon,    05  Aug 2019    12:33:53    GMT
5   Wed,    04  Sep 2019    12:33:53    GMT
6   Fri,    04  Oct 2019    12:33:53    GMT
7   Mon,    04  Nov 2019    12:33:53    GMT
8   Wed,    04  Dec 2019    12:33:53    GMT
9   Fri,    03  Jan 2020    12:33:53    GMT
10  Wed,    05  Feb 2020    12:33:53    GMT
  

Ожидается, что

 1    Mon,  08   Apr   2019
2    Wed,  10   Apr   2019
3    Fri,  12   Apr   2019
4    Mon,  13   May   2019
5    Wed,  08   May   2019  
6    Fri,  10   May   2019.........
  

Ответ №1:

RFC 5545, раздел 3.3.10. гласит:

Каждому значению по дням также может предшествовать положительное ( n) или отрицательное (-n) целое число. Если присутствует, это указывает на n-е появление определенного дня в ЕЖЕМЕСЯЧНОМ или ГОДОВОМ «RRULE».

Таким образом, правило, которое вы ищете, буквально определяет 2-й понедельник ( 2MO ), среду ( 2WE ) и пятницу ( 2FR ) каждого месяца.

FREQ=MONTHLY;COUNT=10;BYDAY=2MO,2WE,2FR (нажмите, чтобы увидеть результаты)

Обратите внимание, что это значение по INTERVAL=1 умолчанию и WKST=SU в данном случае бессмысленно, поэтому вы можете просто опустить их.

Кстати, ваше правило в основном гласит, что из всех понедельников, сред и пятниц месяца берите второй экземпляр в этом месяце.