【问题标题】:FullCalendar V4 - How to account for shorter months in a recurring event series?FullCalendar V4 - 如何在重复事件系列中计算较短的月份?
【发布时间】:2019-06-30 23:04:06
【问题描述】:

我使用FullCalendar v4-alpha-3RRule plugin 来生成重复事件。它按预期工作,只有一个问题:如何修改重复事件以说明比系列中起始月份天数更少的月份?

例如,如果第一次发生在 2019 年 1 月 29 日;由于只有 28 天(不包括闰年),该事件将在随后所有月份的 29 日重复,2 月除外。

我尝试将dtstart 重置为下个月的第一天。它可以工作,只是事件不再是递归的。

这是我设置的精简版 sn-p:

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);                     
    } 
  }
});

如果有任何见解,我将不胜感激。

【问题讨论】:

    标签: recurring-events rrule fullcalendar-4


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 2017-11-27
      相关资源
      最近更新 更多