周末的 RRULE,包括一个月的第一个星期日

RRULE for the weekend including the first sunday of a month

我们每年 周末 (Fr-Su) 都会举办活动,其中包括六月的第一个星期日 。我将如何创建一个 iCalendar 事件 来表达这三天(全天事件)?

为第一个星期日创建规则很容易。但是对于星期六和星期五,我没有成功创建一个倒数的规则(RFC 5545INTERVALCOUNT必须是正数)。而且我想不出不同的表达方式那将从星期五开始 - 它可能是五月的最后一个星期五,但也是六月的第一个星期五。

在这方面缺少 RFC 5545 中的 RRRULE 规范。 INTERVALCOUNT 值用于重复事件,而不是事件本身。我在尝试定义美国日 "Black Friday" 时遇到了类似的问题,即 11 月的第 4 个星期四(感恩节后的星期五)之后的一天。 11 月的第 4 个星期五可能发生在第 4 个星期四之后的第二天,或前一周。我找不到针对这种情况制定 RRULE 的方法。

我相信您需要单独对事件进行编码,而不是使用循环规则。

RRULE:FREQ=YEARLY;BYDAY=FR;BYMONTH=5,6;BYSETPOS=2;BYMONTHDAY=-2,-1,1,2,3,4,5,6,7' 似乎可以诀窍。

让我走上正轨:使用 'BYMONTHDAY' 我可以从月底开始倒数。

下个月第一个星期日之前的星期五可以是上个月的最后一天或倒数第二天,也可以是该月的第 5 天。如果我包括五月和六月,我会得到一个包含这一天的集合。 'BYSETPOS' 允许我选择找到的第二个星期五。为了始终让集合中的第二天成为我想要的日子,我包括了该月的第 6 天和第 7 天,这让我在 5 月的第一个星期五保持稳定。无论如何,'BYSETPOS' 会丢弃 6 月可能匹配的其他星期五。

延长到周六很简单,六月的第一个周日也很简单。

我用 rrule.js

制定了规则

https://jakubroztocil.github.io/rrule/#/rfc/RRULE:BYDAY=FR;BYMONTH=5,6;BYSETPOS=2;BYMONTHDAY=-2,-1,1,2,3,4,5,6,7