循环事件(适用于 v7.1 及以下版本)
本文介绍 DHTMLX Scheduler 中循环事件的旧格式。如需了解 DHTMLX Scheduler v7.1 及以上版本的循环事件,请参见此处。
默认情况下,scheduler 不支持循环事件。要添加此功能,需要在页面上启用一个名为 recurring_legacy 的特殊扩展。
scheduler.plugins({
recurring_legacy: true
});
启用循环事件支持后,lightbox 会包含一个额外的部分,如下所示:

配置选项
该库提供了多种选项用于配置循环事件:
- repeat_date - 控制"循环"lightbox 中"结束时间"字段的日期格式
- include_end_by - 设置"结束时间"字段的日期是否包含在内
- recurring_overflow_instances - 管理跨月循环事件的处理方式
- repeat_precise - 避免"每周"循环事件包含过去的日期
- occurrence_timestamp_in_utc - 支持跨时区处理循环事件
scheduler.config.repeat_date = "%m/%d/%Y";
scheduler.config.include_end_by = true;
...
scheduler.init('scheduler_here', new Date(2019, 7, 5), "month");
"循环" Lightbox
启用循环扩展后,lightbox 会新增一个名为"重复事件"的部分。默认的"循环"lightbox 配置如下:
[
{name:"description", height:130, map_to:"text", type:"textarea" , focus:true},
{name:"recurring", height:115, type:"recurring", map_to:"rec_type",
button:"recurring"},
{name:"time", height:72, type:"time", map_to:"auto"}
];
如有需要,可以添加其他部分,但"recurring"和"time"部分必须保留,并且"time"部分应始终位于"recurring"部分之后。
服务端集成
循环事件在数据库中作为一条记录保存,包含所有常规事件字段以及三个额外字段:
- rec_type - (varchar) 定义循环模式;该字段由系统自动填写
- event_length - (long int) 事件持续时间(秒)
- event_pid - (int) 事件系列的父级 ID
典型的 connector 查询如下:
$scheduler->render_table("events_rec","event_id",
"start_date,end_date,text,rec_type,event_pid,event_length");
除了这些必需字段外,还可以从数据库中获取其他数据。
需要注意的是,start_date 和 end_date 的含义如下:
- start_date - 系列中第一个事件的开始日期,格式为 'yyyy-mm-dd hh:mm:ss'(参见 날짜 형식 지정)。
- end_date - 系列中最后一个事件的结束日期,格式为 'yyyy-mm-dd 00:00:00'(参见 날짜 형식 지정)。
例如,一个 2019 年 1 月 3 日 10:00 开始、每天重复、2019 年 1 月 13 日 12:00 结束的循环事件,将 以如下方式存储:
id:1,
start_date:"2019-01-03 10:00:00",
end_date:"2019-01-13 00:00:00",
text:"some_text",
details:"",
rec_type:"day_1___",
event_length:"7200",
event_pid:"0" // 父事件为 0,子事件为父事件的 ID
在客户端,rec_type 字段的格式为:
[type]_[count]_[day]_[count2]_[days]#[extra]
其中:
- type - 循环类型:'day'、'week'、'month'、'year'
- count - 事件之间的间隔(以类型单位计)
- day 和 count2 - 指定某月的具体某一天(如每月第一个周一、第三个周五)
- days - 以逗号分隔的受影响星期几列表
- extra - 额外信息,用于调整循环详情显示方式
rec_type 示例:
- "day_3___" - 每三天一次
- "month_2___" - 每两个月一次
- "month_1_1_2_" - 每月第二个周一
- "week_2___1,5" - 每两周的周一和周五
注意:双下划线或三下划线表示该参数被省略。
后端解析循环系列
循环事件在数据库中以单条记录保存,Scheduler 可以在客户端拆分。如果需要在服务端获取每次发生的具体日期,可使用 ASP.NET/ASP.NET Core 或 PHP 的辅助库进行解析。
这些库可在 GitHub 获取: