Я пытаюсь создать списки вхождений для указанного RRULE в PHP, используя несколько разных библиотек (когда а также RRule).
Спецификация RRule (также увидеть это) указывает, что мы можем указать несколько элементов, разделенных запятыми для большинства свойств:
(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
Я ожидал бы получать ежегодные события в воскресенье, понедельник и вторник, в феврале и марте.
Однако эти библиотеки возвращают только одно вхождение, соответствующее первому дню / месяцу в списке. Таким образом, если мы назначим дату начала 4 февраля 2018 года и создадим события в течение следующих нескольких лет, мы получим только 4 февраля 2018 года, 3 февраля 2019 года, 2 февраля 2020 года и т. Д. В понедельник или Вторники или любые даты марта.
Может ли кто-то пролить свет на то, является ли это ошибкой или действительно ожидаемым поведением?
Спасибо!
Может ли кто-то пролить свет на то, является ли это ошибкой или действительно ожидаемым поведением?
Я автор PHP-rrule, так что спасибо за использование моей библиотеки! Я могу пролить немного света: у вас есть BYSETPOS=1
который эксплицитно ограничить набор результатов первым появлением в списке. Так что да, это ожидаемое поведение. Зачем добавил BYSETPOS
если бы вы хотели все?
Других решений пока нет …