EXDATE 是否不包含在完整日历的规则中

Is EXDATE not included in rrule for Full Calendar

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

Failure passing 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"
}

不太了解这种特殊的 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

观看此 code sandbox 演示

好的,我解决了,@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 天时间尝试让它工作,希望这能帮助节省其他人的时间。

此格式也可用于多个 EXDATE:

rrule: "DTSTART:20201114T000000Z\nRRULE:FREQ=WEEKLY\nEXDATE:20201121T000000Z,20201128T000000Z"

此字符串使用 rrule.js 库中的 rruleSet.exdate(new Date(Date.UTC(2012, 5, 1, 10, 30))) 格式化,在规则对象中添加多个 EXDATE,然后使用 .toString()

方法

另外,请注意,为 RRule 日期时间添加 'Z' 字符现在适用于 v5.4.0

在最新版本 5.4.0 中,以下代码将起作用:

DTSTART:20201101T040000Z RRULE:FREQ=每周;间隔=1;每天=TU EXDATE:20201110T040000Z,20201124T040000Z

FullCalendar 现在支持多个 exdate

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

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