FullCalendar V4-如何在周期性事件系列中考虑较短的月份?

时间:2019-02-06 21:46:30

标签: recurring-events rrule fullcalendar-4

我正在将FullCalendar v4-alpha-3RRule plugin配合使用来生成重复事件。它可以按预期运行,并且只有一个问题:如何修改重复发生的事件,以解决比系列中的起始月份少的几天的月份?

例如,如果第一个每月出现在2019年1月29日;该活动将在随后的所有月份的29日重复,但2月除外,因为只有28天(不包括le年)。

我尝试将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 :(得分:0)

不是我所希望的解决方案,但是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/