我正在尝试使用几个不同的库(When和RRule)为PHP中的指定RRULE生成事件列表。
RRule specification(also see this)表示我们可以为大多数属性指定多个用逗号分隔的项目:
(BYSECOND" "=" byseclist )
( ";" "BYMINUTE" "=" byminlist )
( ";" "BYHOUR" "=" byhrlist )
( ";" "BYDAY" "=" bywdaylist )
( ";" "BYMONTHDAY" "=" bymodaylist )
( ";" "BYYEARDAY" "=" byyrdaylist )
( ";" "BYWEEKNO" "=" bywknolist )
( ";" "BYMONTH" "=" bymolist )
( ";" "BYSETPOS "=" bysplist )
请注意,这些值是指值的“列表”,并且该规范似乎表明所有值都可以用逗号分隔。例如,BYMONTH = 1,2,3表示一月,二月和三月。
但是,当我尝试生成这样的RRULE时:
FREQ=YEARLY;INTERVAL=1;BYDAY=SU,MO,TU;BYSETPOS=1;BYMONTH=2,3
我希望每年的2月和3月的星期日,星期一和星期二都会发生该事件。
但是,这些库仅返回与列表中第一天/月匹配的单个匹配项。因此,如果我们将开始日期指定为2018年2月4日,并在以后的几年中生成事件,则只会得到2018年2月4日,2019年2月3日,2020年2月2日等。星期一或星期二或三月的任何日期。
有人可以阐明这是错误还是实际预期的行为?
谢谢!
答案 0 :(得分:2)
有人可以阐明这是错误还是实际预期的行为?
我是php-rrule的作者,非常感谢您使用我的lib!我可以很容易地了解一下:您有BYSETPOS=1
,它明确地将结果集限制为列表的第一个出现。是的,这是预期的行为。如果需要所有内容,为什么还要添加BYSETPOS
?