如何编写RRULE实现隔周交替分别在周一、周五触发的重复事件
RRULE隔周交替触发规则实现方案
你想要的隔周交替触发A周周一、B周周五的效果,无法通过单条RRULE实现,因为RRULE的INTERVAL参数是全局生效的,不能给不同的BYDAY值设置不同的时间偏移。你之前写的规则之所以同周同时触发周一周五,就是因为INTERVAL=2定义的是每2周为一个触发周期,周期内所有匹配BYDAY的日期都会被选中。
可行实现方案
拆分出两条独立的RRULE规则,分别匹配周一和周五的触发逻辑,两条规则的起始时间错开1周,触发间隔都设为2周即可,示例如下(以首次触发为2024年5月6日周一下午4点为例):
- 匹配A周周一下午4点的规则,共触发15次:
DTSTART设为20240506T160000
RRULE规则:RRULE:FREQ=WEEKLY;COUNT=15;INTERVAL=2;BYDAY=MO - 匹配B周周五下午4点的规则,共触发15次:
DTSTART设为20240517T160000(即首次周一下隔周的周五)
RRULE规则:RRULE:FREQ=WEEKLY;COUNT=15;INTERVAL=2;BYDAY=FR
两条规则组合后总触发次数为30次,完全符合你的需求,也兼容所有支持iCalendar RRULE标准的平台。如果需要调整总触发次数,对应修改两条规则的COUNT值即可,保证两者相加等于你要的总次数。
注意:如果你的日历系统默认周起始为周日,只需要对应调整两条规则的DTSTART日期,保证周五的首次触发在周一首次触发的第二周即可,不需要修改RRULE参数。
内容的提问来源于stack exchange,提问作者marcus erronius
相关产品推荐
相关产品推荐

