半周活动规则
RRule for semi-weekly events
我一直在努力弄清楚如何编写一个 RRULE,它在每周交替的日子里有事件;例如:
- A 周:周一下午 4 点
- B 周:周五下午 4 点
A 周和 B 周连续交替进入未来。
我得到的最接近的是:
RRULE:FREQ=WEEKLY;COUNT=30;INTERVAL=2;BYDAY=MO,FR
这很接近,但给我同一周的星期一和星期五。我怎样才能将它编码到 select 的 第二个 星期五,在两周的时间间隔内?这似乎比使用 RRULE 可以完成的大部分工作要简单得多,所以我可能遗漏了一些明显的东西?
如果这打算永远持续下去,没有 'COUNT',那么我认为你能做到的唯一方法就是举办两个活动。
使用任何其他 BY 甚至 BYSETPOS 都会在年底的某个时候或您定义的序列末尾遇到麻烦。两个事件允许一个人干净地迭代星期一和星期五。
为每个事件选择 DTSTART 对于确保您在星期一之后的正确星期五重复进行至关重要。你有类似 M fm FM fm FM fm
BEGIN:VEVENT
DTSTART:20211022T160000Z
DTEND:20211022T170000Z
RRULE:FREQ=WEEKLY;WKST=MO;INTERVAL=2;BYDAY=FR
DTSTAMP:20211012T064353Z
UID:STACKTESTFRIDAY
CREATED:20171102T185254Z
DESCRIPTION:
LAST-MODIFIED:20211012T064141Z
LOCATION:
SEQUENCE:2
STATUS:CONFIRMED
SUMMARY:Afternoon Tea on Friday
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20211011T160000Z
DTEND:20211011T180000Z
RRULE:FREQ=WEEKLY;WKST=MO;INTERVAL=2;BYDAY=MO
DTSTAMP:20211012T064353Z
UID:STACKTESTMONDAY
CREATED:20171102T185254Z
DESCRIPTION:
LAST-MODIFIED:20211012T064112Z
LOCATION:
SEQUENCE:2
STATUS:CONFIRMED
SUMMARY:Afternoon Tea on Monday
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
这是另一个可能适合您的选项。在 YEARLY
规则中,您可以在 BYDAY
元素前添加一个偏移量 n
以标识该年中该工作日的第 n 个实例。
如果您的周期性事件在一年中的第 20 个星期一开始,您可以构建这样的规则以在工作日交替的情况下迭代 30 个实例。
RRULE:FREQ=YEARLY;BYDAY=20MO,21FR,22MO,23FR,24MO,25FR,26MO,27FR,28MO,29FR,30MO,31FR,32MO,33FR,34MO,35FR,36MO,37FR,38MO,39FR,40MO,41FR,42MO,43FR,44MO,45FR,46MO,47FR,48MO,49FR
请注意,这假设一年从星期六、星期日或星期一开始。
如果一年从星期二、星期三、星期四或星期五开始,工作日必须具有相同的数字(因为在这种情况下,第 n 个星期一和第 n+1 个星期五出现在同一周), 即
RRULE:FREQ=YEARLY;BYDAY=20MO,22FR,22MO,24FR,24MO,26FR,26MO,28FR,28MO,30FR,30MO,32FR,32MO,34FR,34MO,36FR,36MO,38FR,38MO,40FR,40MO,42FR,42MO,44FR,44MO,46FR,46MO,48FR,48MO,50FR
我一直在努力弄清楚如何编写一个 RRULE,它在每周交替的日子里有事件;例如:
- A 周:周一下午 4 点
- B 周:周五下午 4 点
A 周和 B 周连续交替进入未来。
我得到的最接近的是:
RRULE:FREQ=WEEKLY;COUNT=30;INTERVAL=2;BYDAY=MO,FR
这很接近,但给我同一周的星期一和星期五。我怎样才能将它编码到 select 的 第二个 星期五,在两周的时间间隔内?这似乎比使用 RRULE 可以完成的大部分工作要简单得多,所以我可能遗漏了一些明显的东西?
如果这打算永远持续下去,没有 'COUNT',那么我认为你能做到的唯一方法就是举办两个活动。
使用任何其他 BY 甚至 BYSETPOS 都会在年底的某个时候或您定义的序列末尾遇到麻烦。两个事件允许一个人干净地迭代星期一和星期五。
为每个事件选择 DTSTART 对于确保您在星期一之后的正确星期五重复进行至关重要。你有类似 M fm FM fm FM fm
BEGIN:VEVENT
DTSTART:20211022T160000Z
DTEND:20211022T170000Z
RRULE:FREQ=WEEKLY;WKST=MO;INTERVAL=2;BYDAY=FR
DTSTAMP:20211012T064353Z
UID:STACKTESTFRIDAY
CREATED:20171102T185254Z
DESCRIPTION:
LAST-MODIFIED:20211012T064141Z
LOCATION:
SEQUENCE:2
STATUS:CONFIRMED
SUMMARY:Afternoon Tea on Friday
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20211011T160000Z
DTEND:20211011T180000Z
RRULE:FREQ=WEEKLY;WKST=MO;INTERVAL=2;BYDAY=MO
DTSTAMP:20211012T064353Z
UID:STACKTESTMONDAY
CREATED:20171102T185254Z
DESCRIPTION:
LAST-MODIFIED:20211012T064112Z
LOCATION:
SEQUENCE:2
STATUS:CONFIRMED
SUMMARY:Afternoon Tea on Monday
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
这是另一个可能适合您的选项。在 YEARLY
规则中,您可以在 BYDAY
元素前添加一个偏移量 n
以标识该年中该工作日的第 n 个实例。
如果您的周期性事件在一年中的第 20 个星期一开始,您可以构建这样的规则以在工作日交替的情况下迭代 30 个实例。
RRULE:FREQ=YEARLY;BYDAY=20MO,21FR,22MO,23FR,24MO,25FR,26MO,27FR,28MO,29FR,30MO,31FR,32MO,33FR,34MO,35FR,36MO,37FR,38MO,39FR,40MO,41FR,42MO,43FR,44MO,45FR,46MO,47FR,48MO,49FR
请注意,这假设一年从星期六、星期日或星期一开始。
如果一年从星期二、星期三、星期四或星期五开始,工作日必须具有相同的数字(因为在这种情况下,第 n 个星期一和第 n+1 个星期五出现在同一周), 即
RRULE:FREQ=YEARLY;BYDAY=20MO,22FR,22MO,24FR,24MO,26FR,26MO,28FR,28MO,30FR,30MO,32FR,32MO,34FR,34MO,36FR,36MO,38FR,38MO,40FR,40MO,42FR,42MO,44FR,44MO,46FR,46MO,48FR,48MO,50FR