我正在使用google-rfc-2445根据rfc-2445生成重复事件:
“VEVENT”的“DTSTART”属性指定包含的开始 事件。对于重复发生的事件,它也指定了第一个 重复集中的实例。
因此,例如每周五发生5次事件的RRULE:
DTSTART;TZID=US-Eastern:20160204T090000
RRULE:FREQ=WEEKLY;COUNT=5;BYDAY=FR;INTERVAL=1;
因此根据rfc-2445,它将生成6个事件。 Thursday 4 February 2016
上的第一个事件,Friday 5 February 2016
上的第二个事件,依此类推。
如果它不在某种模式中,我怎样才能实现排除第一个事件?在上面的示例中,它应排除第一次出现4 February 2016
。如果定义星期五的DTSTART;TZID=US-Eastern:20160205T090000
,它应该首先出现。
是否可以通过在RRULE
本身中定义此类“排除规则”来完成,或者我需要检查代码,如果DTSTART
与{{1}中定义的日期不同我应该在代码中查找最接近的日期(手动)并相应地更改BYDAY
?
更新 好吧,根据rfc-2445以及谷歌小组的这个问题:https://groups.google.com/forum/#!topic/google-rfc-2445/xqYFe411ysA
“EXDATE”属性可用于排除
中指定的值 “DTSTART”。但是,在这种情况下,原始的“DTSTART”日期必须是 仍然由日历和日程安排系统维护,因为
原始“DTSTART”值具有其他的固有使用依赖性 诸如“RECURRENCE-ID”之类的属性。
看起来我需要使用DTSTART
属性来实现我的需要。尝试通过遵循RRULE来实现这一目标:
EXDATE
以下代码中的开始日期为:EXDATE;TZID=Asia/Jerusalem:20160210T000000
RRULE:FREQ=WEEKLY;COUNT=5;BYDAY=WE;INTERVAL=1;
:
2016-02-10T00:00:00.000+02:00
但它只返回4个事件,因此始终删除第一个事件。
答案 0 :(得分:1)
根据您提供的问题的描述,当添加DTSTART
时您将获得6个事件,并且当它是 good时,您不希望它成为实例列表和5个事件的一部分日期。
所以你想要的只是获得最后 5个事件,这可以通过使用BYSETPOS
中的RRULE
来实现,以下应该可以做到这一点:< / p>
BYSETPOS = -5,-4,-3,-2,-1
在所有情况下都会返回RRULE
给出的最后5个事件,无论DTSTART
是否与RRULE
的模式匹配。