【发布时间】:2020-03-30 15:34:30
【问题描述】:
你能为以下场景指定一个 RRULE 吗?
每月第一天重复。 除非,如果它落在星期日,则在第二天(每月 2 日星期一)再次发生。 除非,如果它落在星期五,则在前一天(上个月的最后一个星期五)重复。
这只是一个练习,看看有什么可能以及如何解决各种问题。
我尝试使用 3 个单独的 RRULE 进行设置:
RRULE:FREQ=MONTHLY;BYMONTHDAY=1;BYDAY=MO,TU,WE,TH,FR
RRULE:FREQ=MONTHLY;BYMONTHDAY=2;BYDAY=MO
RRULE:FREQ=MONTHLY;BYSETPOS=-1;BYDAY=FR
第一条规则可以满足我的要求 - 只有当它在工作日时才在每月的第一天。 第二条规则做我想要的——如果第一条是在星期日,那么这条规则会选择下一个星期一,也就是本月的第二个星期一。 第三条规则是问题。这会选择每个月的最后一个星期五。但我想要的是这个月的最后一天,只要它是星期五。或者,换一种说法,只有当月的最后一天是该月的最后一个星期五。这有点棘手,因为您不能使用 BYMONTHDAY,因为不同的月份有不同的天数,而且我认为 BYMONTHDAY=-1 不能按预期工作。 有人能想出正确的规则“只有当月的最后一天是星期五”。
【问题讨论】: