Fullcalendar 完整日历的rrule中是否不包括EXDATE

Fullcalendar 完整日历的rrule中是否不包括EXDATE,fullcalendar,rrule,fullcalendar-4,Fullcalendar,Rrule,Fullcalendar 4,我有一个经常性的日历事件发生在每个月的第四个星期五,我想排除一个星期五事件。我尝试了EXDATE,但出现了一个错误 传递JSON失败 如果没有EXDATE,rrule工作正常 以下是我在整个日历中用于制作活动的详细信息 { start: "2019-07-06T09:00:00+10:00", end: "2019-07-06T15:00:00+10:00", rrule: "FREQ=WEEKLY;DTSTART=20190607T090000;EXDATE=20190

我有一个经常性的日历事件发生在每个月的第四个星期五,我想排除一个星期五事件。我尝试了EXDATE,但出现了一个错误

传递JSON失败

如果没有EXDATE,rrule工作正常

以下是我在整个日历中用于制作活动的详细信息

{
    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"
}

我不太了解这种JSON格式,但EXDATE是一个属性,而不是RRULE的参数。 请试一试

rrule: "FREQ=WEEKLY;DTSTART=20190607T090000;INTERVAL=4;BYDAY=FR\nEXDATE=20190705T090000"

可以添加异常。您只需正确设置RRule字符串的格式:

DTSTART:20190610T103000\nRRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20190801\nEXDATE:20190618T103000Z\nEXDATE:20190619T103000

观看此演示

好的,我想出来了,@Arnaud是对的,RRULE、EXDATE和DTSTART不是RRULE的参数,但它们确实在带有换行符的FullCalendar的RRULE属性中,它们还需要:not=。范例

rrule: 'DTSTART:20190308T120000Z\nRRULE:FREQ=WEEKLY;UNTIL=20220330\nEXDATE:20190614T120000Z\nEXDATE:20190628T120000Z'
请注意,有两个EXDATE属性,对于要排除的每个日期,都需要放置一个EXDATE。
我花了3天的时间试图让它工作,希望这将有助于节省其他人的时间。

此格式也可用于多个EXDATE:

rrule: "DTSTART:20201114T000000Z\nRRULE:FREQ=WEEKLY\nEXDATE:20201121T000000Z,20201128T000000Z"
此字符串的格式是使用rrule.js库中的
rruleSet.exdate(新日期(Date.UTC(2012,5,1,10,30))
在rrule对象中添加多个exdate,然后使用方法
.toString()


另外,请注意,在最新版本5.4.0的v5.4.0中,为RRule datetimes添加“Z”字符现在可以工作。以下代码可以工作:

DTSTART:20201101T040000Z RRULE:FREQ=每周;间隔=1;拜日=屠 出厂日期:20201110T040000Z、20201124T040000Z

FullCalendar现在支持多个exdate

我使用RRule和RRuleSet生成RRule字符串: *注意:您必须小心使用夏令时。这就是为什么我不得不调整几次。不要关注我的特定日期对象。这只是使用RRuleSet和RRule支持多个ExDate的解决方案的一个示例

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());
以下是发行编号:

我看不出这比OP的代码有什么好处,也看不出它为什么有效。我非常怀疑RRULE格式是否有换行符(
\n
)字符作为可接受的分隔符。您所做的只是替换
带有
\n
,我怀疑它是否有效。我对格式不太了解,但看起来没有什么意义。你能准确地解释一下RRULE中“属性”和“参数”的区别吗?好吧,看起来它更像是一个RRULE.js问题,而不是一个fullcalendar问题。正在使用的rrule插件引发错误未知rrule属性“EXDATE”。如果您尝试输入FREQ=WEEKLY,它也会在rrule演示页面上执行此操作;DTSTART=20190607T090000;EXDATE=20190705T090000;间隔=4;BYDAY=FR作为文本字符串,您会得到相同的错误。@ADyson RRULE和EXDATE都被RFC5545定义为属性。请参阅和,了解它们各自的定义,并帮助您理解这一切。在最初的文章中,EXDATE被设置为RRULE的参数,而不是其本身的属性。然后,如果查看,您将看到可以在RRLE中指定多个属性,以\n分隔。幸运的是,看起来只有DTSTART属性可以在RRLE中指定,而没有与重复周期相关的属性(EXDATE或RDATE)。查看上的文档,我假设我必须使用RRuleSet构造函数即.RRuleSet.prototype.exdate(dt)来设置每个exdate,但我不知道在fullCalendar代码中的何处进行设置fullCalendar也接受一个对象而不是字符串。您能否提供一个示例,说明我们将如何在具有多个日期的表单中实现它?请注意,fullcalendar/rrule connector中当前存在一个错误,如果您以UTC格式(拖尾Z)提供日期,则会导致多个ExDate无法正常工作。看,我假设这已经帮我节省了3天。我非常感谢您。请注意,fullcalendar/rrule connector中当前存在一个错误,如果您以UTC格式(尾随Z)提供日期,则会导致多个EXDATEs无法正常工作。瞧,伙计,你帮我省了不少时间和精力@jiroch为RRule datetimes添加“Z”字符现在可以在v5.4.0中使用。对于要排除的每个日期,您的
是什么意思?那么你是说如果我想排除2021年3月5日,那么这个日期必须是两次?如果是这样,在您的示例中,我每个日期只看到一个:
20190614T1200000Z
20190628T120000Z
,它们不匹配。您确定吗?当我尝试解析带有EXDATE的RRULE时,它表示EXDATE是无效属性。当我保存字符串并尝试在稍后阶段使用该字符串时,我得到以下结果:EXDATE中不支持的RFC prop EXDATE:20201109T210000Z、20201123T210000Z。Fullcalendar无法在稍后阶段分析这些EXDATES。请参阅并使用RRuleSet not RRule,并确保您使用的是完整的日历版本5.4.0i。我有一大堆包含EXDATE的JSON事件数据。当我将其发送到fullcalendar时,它抛出一个错误,表示EXDATE无效。你是如何让RRuleSet进入Fullcalendar 5.4.0的?@PiotrStulinski发布了你的RRULE示例,我来看看