首页 > 解决方案 > iCal 在最近的工作日进行每月定期活动?

问题描述

我想在每个月的 24 日创建一个定期活动,如果这一天是周末,请将其安排在最近的工作日。如果这一天是星期六,我想安排在前一个工作日(星期五)。如果这一天是星期天,我想安排在下一个工作日(星期一)。这与 iCal RRULE 有什么关系吗?

我已经看到了一个类似的问题,但那总是在下一个工作日。

标签: calendargoogle-calendar-apiicalendar

解决方案


我能够使用这个组合的 iCAL RRULE 根据您的要求创建一个重复事件

RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=23,24;BYSETPOS=-1
RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=24,25;BYSETPOS=1

RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=23,24;BYSETPOS=-1

  • 通过将 BYSETPOS 设置为 -1,此规则将选择集合中匹配规则的最后一个匹配项。

如果 23 和 24 都在工作日,它将选择最后出现的第 24 天

如果 24 是星期六,则根据规则只匹配一次,因此它将选择星期五的第 23 天

如果 23 和 24 都在周末,则不会创建任何事件。这就是为什么需要另一个规则来解决这个问题。

RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=24,25;BYSETPOS=1

  • 通过将 BYSETPOS 设置为 1,此规则将选择集合中与规则匹配的第一个匹配项。

如果 24 和 25 都在工作日,它将选择第一个出现的时间,即第 24 天

如果 24 是星期天,则根据规则只匹配一次,因此它将选择星期一的第 25 天

如果 24 和 25 都在周末,则不会根据此规则创建任何事件。


推荐阅读