我有一个重复的日历活动,该活动发生在每个月的第4个星期五,我想排除1个星期五的活动。我尝试过EXDATE
,但遇到错误
传递JSON失败
没有EXDATE
的情况下,效果很好。
这是我在“完整日历”中用于生成事件的详细信息
{
start: "2019-07-06T09:00:00+10:00",
end: "2019-07-06T15:00:00+10:00",
rrule: "FREQ=WEEKLY;DTSTART=20190607T090000;EXDATE=20190705T090000;INTERVAL=4;BYDAY=FR",
title: "Weed Spraying",
description: "June, Harry, Pat, George, Valda, Helen, Karen, Ken",
color: "red",
url: "./?action=detail_view&id=22",
duration: "06:00"
}
答案 0 :(得分:2)
可以添加例外。您只需要正确格式化RRule字符串即可:
DTSTART:20190610T103000\nRRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20190801\nEXDATE:20190618T103000Z\nEXDATE:20190619T103000
观看此code sandbox进行演示
答案 1 :(得分:1)
好吧,我知道了,@ Arnaud是正确的,RRULE,EXDATE和DTSTART是属性而不是rrule的参数,但是它们确实以\ n换行符出现在FullCalendar的rrule属性中,它们还需要一个:NOT =。例子
rrule: 'DTSTART:20190308T120000Z\nRRULE:FREQ=WEEKLY;UNTIL=20220330\nEXDATE:20190614T120000Z\nEXDATE:20190628T120000Z'
请注意如何有2个EXDATE属性,对于每个要排除的日期,都需要放置一个EXDATE。 我花了3天的时间使它正常工作,希望这可以帮助节省其他人的时间。
答案 2 :(得分:1)
此格式也可以用于多个EXDATE:
rrule: "DTSTART:20201114T000000Z\nRRULE:FREQ=WEEKLY\nEXDATE:20201121T000000Z,20201128T000000Z"
此字符串是使用rrule.js库中的rruleSet.exdate(new Date(Date.UTC(2012, 5, 1, 10, 30)))
格式化的,以便在rrule对象中添加多个EXDATE,然后使用方法.toString()
另外,请注意,在RRule日期时间中添加'Z'字符现在在v5.4.0中有效
答案 3 :(得分:0)
对这种特定的JSON格式了解不多,但是EXDATE是属性,而不是RRULE的参数。 请尝试
rrule: "FREQ=WEEKLY;DTSTART=20190607T090000;INTERVAL=4;BYDAY=FR\nEXDATE=20190705T090000"
答案 4 :(得分:0)
在最新版本5.4.0中,以下代码将起作用:
DTSTART:20201101T040000Z RRULE:FREQ = WEEKLY; INTERVAL = 1; BYDAY = TU 到期日:20201110T040000Z,20201124T040000Z
FullCalendar现在支持多个过期日期
我使用RRule和RRuleSet产生了rrule字符串: *注意:您必须注意夏令时。这就是为什么我不得不调整几次。不要专注于我的特定日期对象。这只是使用RRuleSet和RRule支持多个过期的解决方案的示例。
const rruleSet = new RRuleSet();
rruleSet.rrule(new RRule({
freq: Frequency.WEEKLY,
interval: 1,
byweekday: [RRule.TU],
dtstart: new Date(2020, 10, 1, 0, 0, 0, 0)
}));
rruleSet.exdate(new Date(2020, 10, 9, 23, 0, 0, 0));
rruleSet.exdate(new Date(2020, 10, 23, 23, 0, 0, 0));
console.log(rruleSet.toString());
以下是问题编号: https://github.com/fullcalendar/fullcalendar/issues/5726