我正在将FullCalendar v4-alpha-3与RRule 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);
}
}
});
我将不胜感激。
答案 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/