完整日历的规则中未包含EXDATE

时间:2019-06-13 12:37:55

标签: fullcalendar rrule fullcalendar-4

我有一个重复的日历活动,该活动发生在每个月的第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"
}

5 个答案:

答案 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