我们每年都会在周末(Fr-Su)举办活动,其中包括 6 月的第一个星期日。我将如何创建一个表达这三天(全天事件)的iCalendar 事件?
为第一个星期日制定规则很容易。但是对于周六和周五,我没有成功创建倒数规则(RFC 5545说INTERVAL
,COUNT
必须是正数)。此外,我想不出从周五开始的不同表达方式——可能是最后一个周五五月,也是六月的第一。
RRULE:FREQ=YEARLY;BYDAY=FR;BYMONTH=5,6;BYSETPOS=2;BYMONTHDAY=-2,-1,1,2,3,4,5,6,7' 似乎可以解决问题。
如何在每月第一个星期六之前的星期五编写 ICS 文件?引导我走向正确的轨道:使用“BYMONTHDAY”,我可以从月底开始倒数。
下个月第一个星期日之前的星期五可以是上个月的最后一天或倒数第二天,也可以是当月的第 5 天。如果我包括 5 月和 6 月,我将得到一个包含这一天的集合。'BYSETPOS' 允许我选择找到的第二个星期五。为了始终让集合中的第二个成为我想要的日期,我将每月的第 6 天和第 7 天包括在内,这让我在 5 月的第一个星期五保持稳定。无论如何,“BYSETPOS”会丢弃 6 月可能匹配的额外星期五。
将其延长到星期六很简单,而 6 月的第一个星期日是微不足道的。
我用 rrule.js 开发了规则
在这方面缺少 RFC 5545 中的 RRRULE 规范。和值用于重复事件,而不是事件本身INTERVAL
。COUNT
在尝试将美国日“黑色星期五”定义为 11 月第四个星期四之后的第二天(感恩节后的星期五)时,我遇到了类似的问题。11 月的第 4 个星期五可能发生在第 4 个星期四之后的第二天或前一周。我没有找到针对这种情况制定 RRULE 的方法。
我相信您需要单独对事件进行编码,而不是使用重复规则。