Fullcalendar v5.6结合RRule:如何访问toText生成可读重复事件文本?
解决方案
不要依赖FullCalendar内部的私有属性来获取RRule实例,这类属性(比如_def.recurringDef.typeData)属于框架内部实现,不对外暴露,且可能在解析过程中丢失原始RRule的完整信息,导致toText()输出异常。
正确的做法是在创建重复事件时,自行保留原始的RRule实例:
- 创建事件时,将RRule实例存入事件的
extendedProps字段:
// 初始化RRule实例 const myRRule = new RRule({ freq: RRule.WEEKLY, interval: 1, dtstart: new Date(2024, 5, 1), // 2024年6月1日 until: new Date(2024, 11, 31) // 2024年12月31日 }); // 向日历添加事件 calendar.addEvent({ title: '每周例会', rrule: myRRule.toString(), // 传给FullCalendar的RRule字符串格式 extendedProps: { originalRRule: myRRule // 存储原始RRule实例 } });
- 在
eventClick中直接调用原始实例的toText():
eventClick: function(info) { if (info.event.extendedProps.originalRRule) { console.log(info.event.extendedProps.originalRRule.toText()); // 示例输出:"every week on Saturday, until December 31, 2024" } }
关于你遇到的内部RRule对象异常问题
FullCalendar在解析RRule字符串时,会做内部的日期转换、时区适配等处理,可能会修改原始RRule的参数(比如调整dtstart为本地时间、简化存储字段),导致你从内部属性取出的RRule实例和原始配置不符。自行保留原始实例可以完全避免这类问题,同时保证toText()输出和RRule官网演示一致。
内容的提问来源于stack exchange,提问作者Damian
相关产品推荐
相关产品推荐

