问题描述
我目前正在使用 iCalendar 规范 (RFC 5545) 来处理重复事件。
直到昨天,他们的重复规则满足了我的所有需求,但现在我很难实施以下规则:
每个月的第一个星期一或每个月的星期三。
例如:
- 2021-05-01 是星期六:活动将于 2021-05-03 星期一举行。
- 2021-06-01 是星期二:活动将于 2021-06-02 星期三举行。
- 2021-07-01 是星期四:活动将于 2021-07-05 星期一举行。
- 2021-08-01 是星期日:活动将于 2021-08-02 星期一举行。
有没有办法定义这种“条件”规则?
解决方法
如果我正确理解了要求,那么它并不完全是有条件的。仅需要第一个星期一和第一个星期三的第一个。 BYSETPOS 就是针对这个的。
在这个例子中,它被用来计算最后一个工作日https://icalevents.com/2555-paydays-last-working-days-and-why-bysetpos-is-useful/
以你为例
RRULE:FREQ=MONTHLY;BYDAY=1MO,1WE;BYSETPOS=1
应该可以,
基本上,RRULE 将扩展所有第一个星期一和星期三,然后“合同”,即采用每对的第一个日期。
规范 https://www.ietf.org/rfc/rfc5545.txt 的第 43 页显示了“扩展”和“收缩”的优先级。