FullCalendar V4 - Как учитывать более короткие месяцы в серии повторяющихся событий? - PullRequest
0 голосов
/ 07 февраля 2019

Я использую FullCalendar v4-alpha-3 с плагином RRule для генерации повторяющихся событий.Он работает, как и ожидалось, только с одной проблемой: как изменить повторяющееся событие для учета месяцев с меньшим числом дней, чем начальный месяц в серии?

Например, если первое ежемесячное вхождение происходит 29 января,2019;событие будет повторяться 29-го числа всех последующих месяцев, кроме февраля, поскольку у него всего 28 дней (без учета високосных годов).

Я попытался сбросить dtstart на первый день следующего месяца.Это работает, за исключением того, что событие больше не является рекурсивным.

Вот урезанный фрагмент моей настройки:

let calendar = new Calendar(calendarEl, {
  plugins: [ rrulePlugin ],
  events: [
    {
      rrule: 'DTSTART:20190129 RRULE:FREQ=MONTHLY;UNTIL=20200130;COUNT=13;BYMONTHDAY=29'
    }
  ],
  eventRender: function(info) {
    ...

    // reset start date to the first day of the following month 
    // if current month has fewer days than base month

    let start = event.start;
    let day = start.getDate();            

    let now = new Date();
    let currentMonth = now.getMonth();     
    let currentYear = now.getFullYear();
    let daysInCurrent = getDaysInMonth(currentMonth + 1, currentYear);

    let nextStart = start;
    if (day > daysInCurrent) {
        nextStart = new Date(currentYear, currentMonth + 1, 1);    
        event.setStart(nextStart);   
        event.setEnd(null);                     
    } 
  }
});

Буду признателен за любую проницательность.

1 Ответ

0 голосов
/ 07 февраля 2019

Не совсем то решение, на которое я надеялся, но свойство RRule bysetpos, похоже, предлагает следующую лучшую альтернативу, поскольку она допускает запасную дату в случае, если указанное не существует.

Например, следующее будет происходить 30-го числа каждого месяца;или последний день месяца, если 30-го числа не существует:

FREQ=MONTHLY;BYMONTHDAY=28,29,30;BYSETPOS=-1.

Источник: https://icalevents.com/2555-paydays-last-working-days-and-why-bysetpos-is-useful/

...