每隔一周的 RRULE,每月最后一周除外

RRULE for every other week except last week of month

除本月的最后一周外,我每隔一个星期六需要一个 RRULE。我尝试以每周一次的频率创建一个,但不知道如何为该月的最后一周应用例外:

RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=SA

我也试过创建一个每月频率的规则,这让我可以跳过这个月的最后一周,但我不知道如何每隔一周做一次:

RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=SA;BYSETPOS=-2,-3,-4,-5

我查看了规范,但没有看到任何使这成为可能的东西。

此处解决方案的秘诀在于 BYMONTHDAY 可以像 BYSETPOS 一样为负数。这允许排除每个月的最后 7 天,即使该月的天数不同。您的 DTSTART 应该在星期六,所以实际上不需要 BYDAY=SA

此规则适用于 google 日历(如果 DTSTART 是星期六,并且通常每两周一次,但不是 DTSTART 指定的一周中任何一天的最后一周规则):

RRULE:FREQ=WEEKLY;INTERVAL=2;BYMONTHDAY=-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18, -19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31

查看测试日历: https://calendar.google.com/calendar/u/0?cid=ZXBwdWE4N2RwZm5xODVic3JydDJzaXFsY3NAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ

规格:https://datatracker.ietf.org/doc/html/rfc2445#page-43

https://icalevents.com/2447-need-to-know-the-possible-combinations-for-repeating-dates-an-ical-cheatsheet/ 扩展和收缩(限制)规则和组合