2

我有一个在每个月的第四个星期五发生的周期性日历事件,我想排除 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"
}
4

5 回答 5

4

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

于 2019-06-19T12:47:02.693 回答
2

可以添加例外。您只需要正确格式化 RRule 字符串:

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

观看此代码沙箱进行演示

于 2019-06-19T09:13:09.690 回答
2

这种格式也可以用于多个 EXDATE:

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

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

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

于 2020-11-14T10:49:45.830 回答
0

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

DTSTART:20201101T040000Z RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU EXDATE:20201110T040000Z,20201124T040000Z

FullCalendar 现在支持多个 exdate

我使用 RRule 和 RRuleSet 来生成 rrule 字符串: *注意:您必须小心夏令时。这就是为什么我不得不调整几次。不要专注于我的特定日期对象。这只是使用 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

于 2020-11-20T15:22:55.897 回答
0

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

rrule: "FREQ=WEEKLY;DTSTART=20190607T090000;INTERVAL=4;BYDAY=FR\nEXDATE=20190705T090000"
于 2019-06-14T06:38:11.923 回答