重复事件
重复事件是日历应用中的常见功能,允许用户创建按指定间隔重复的事件。从 v7.1 开始,Scheduler 使用基于 RFC-5545 的格式来表示重复事件。
本文将解释如何在 Scheduler 中使用重复事件,以及如何将它们存储到数据库中。
注释
您可以在 此处 找到传统旧格式的重复事件的描述
默 认情况下,Scheduler 不支持重复事件。若要提供此类支持,需要在页面上启用 recurring 扩展:
scheduler.plugins({
recurring: true
});
一旦启用对重复事件的支持,弹出框将变成如下所示:

配置选项
库提供了以下选项用于配置重复事件:
repeat_date- 设置在“recurring”弹出框中 “End by” 字段的日期格式
scheduler.config.repeat_date = "%m/%d/%Y";
...
scheduler.init('scheduler_here', new Date(2027, 7, 5), "month");
相关示例 Recurring events
“Recurring” 弹出框
默认情况下,一旦启用重复扩展,弹出框会多出一个部分——“Repeat event”。
“recurring” 弹出框的默认定义如下:
scheduler.config.lightbox.sections = [
{ name: "description", map_to: "text", type: "textarea", focus: true },
{ name: "recurring", type: "recurring", map_to: "rrule" },
{ name: "time", height: 72, type: "time", map_to: "auto" }
];
相关示例 Recurring events
格式描述
重复事件在数据库中以一条记录存储,包含常规事件的全部字段,以及若干附加属性:
- start_date - (datetime) 定义系列的开始日期
- end_date - (datetime) 定义系列的结束日期
- rrule - (string) 定义重复规则
- duration - (number) 重复实例的持续时间
- recurring_event_id - (string|number) 父系列的 id,仅在修改或删除的发生中填写
- original_start - (datetime) 修改过的实例的原始日期,仅在修改或删除的发生中填写
- deleted - (boolean) 指定序列中已删除的实例,仅在已删除的发生中填写
rrule 遵循 RFC-5545 中规定的 iCalendar 格式,详细描述了控制重复模式的频率、间隔和其他参数。
与 iCalendar 格式的差异
我们的格式在两个关键点上与 iCalendar 格式不同:
将 STDATE 和 DTEND 分开存储:
在 iCalendar 格式中,重复序列的开始日期和结束日期通常作为 RRULE 字符串的一部分,被包含在 STDATE 和 DTEND 属性中。我们的格式中,stdate 和 dtend 作为独立字段存储。这种分离便于按日期对重复事件进行更直观的操作和查询,而无需解析 RRULE 字符串。
下面是一个示例,表示从 2027 年 6 月 1 日起至 2027 年 12 月 1 日,每周一重复的重复事件序列:
{
"id": 1,
"text": "Weekly Team Meeting",
"start_date": "2027-06-03 09:00:00",
"duration": 3600,
"end_date": "2027-12-02 10:00:00",
"rrule": "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO",
"recurring_event_id": null,
"original_start": null
}