FullCalendar V4 - 如何计算周期性事件系列中较短的月份?
FullCalendar V4 - How to account for shorter months in a recurring event series?
我正在使用 FullCalendar v4-alpha-3 with the RRule plugin 生成重复事件。它按预期工作,只有一个问题:如何修改重复发生的事件以说明比系列中的起始月份天数少的月份?
例如,如果第一个月度事件发生在 2019 年 1 月 29 日;该事件将在所有后续月份的 29 日重复,但 2 月除外,因为它只有 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);
}
}
});
如有任何见解,我将不胜感激。
不完全是我希望的解决方案,但 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/
我正在使用 FullCalendar v4-alpha-3 with the RRule plugin 生成重复事件。它按预期工作,只有一个问题:如何修改重复发生的事件以说明比系列中的起始月份天数少的月份?
例如,如果第一个月度事件发生在 2019 年 1 月 29 日;该事件将在所有后续月份的 29 日重复,但 2 月除外,因为它只有 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);
}
}
});
如有任何见解,我将不胜感激。
不完全是我希望的解决方案,但 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/