Какое выражение iCal RRULE следует использовать для поиска пятницы после последней среды месяца? Итак, мне нужно (RRULE:FREQ=MONTHLY;BYDAY=-1WE) + 2 дня...
Как найти пятницу после последней среды месяца?
Ответы (1)
Я согласен с Эвертом, что это невозможно с одним RRULE.
Однако вы можете добиться этого с помощью комбинации нескольких RRULE.
Таким образом, вы можете разделить свое событие на несколько событий, каждое из которых имеет одно из следующих RRULE:
Если среда выпадает на последний или предпоследний день месяца, наша пятница будет 1-го или 2-го числа следующего месяца.
FREQ=MONTHLY;BYMONTHDAY=1,2;BYDAY=1FR
В месяцах с 31 днем самая ранняя дата последней среды - 25-е число, поэтому следующая пятница будет одним из дней 27-31:
FREQ=MONTHLY;BYMONTH=1,3,5,7,8,10,12;BYMONTHDAY=27,28,29,30,31;BYDAY=FR
В месяцах с 30 днями самая ранняя дата последней среды — 24-е число, поэтому следующая пятница будет одним из дней 26-30:
FREQ=MONTHLY;BYMONTH=4,6,9,11;BYMONTHDAY=26,27,28,29,30;BYDAY=FR
Февраль непростой, потому что в невисокосные годы желаемая пятница будет между 24 и 28 числами, а в високосные годы — между 25 и 29 числами. Однако в течение следующих 50 лет будет только один високосный год, в котором 24 февраля будет пятницей, то есть 2040 год (проверьте результат FREQ=MONTHLY=BYMONTHDAY=24; a>), поэтому следующее ПРАВИЛО будет правильным до 2040 года:
FREQ=MONTHLY;BYMONTH=2;BYMONTHDAY=24,25,26,27,28,29;BYDAY=FR
Если вас беспокоят високосные годы, добавьте EXDATE, как показано ниже, и у вас все получится на следующие 100 лет (сделайте эти значения DATE-TIME, если ваша начальная дата имеет время):
EXDATE;VALUE=DATE:20400224,20680224,20960224,21080224
Если вы точно знаете, что ваши клиенты поддерживают несколько RRULE (которые были нерешительно объявлены устаревшими в RFC 5545, но по-прежнему полностью действителен в RFC 2445), вы можете добавить их тоже в одно событие, но я бы не рекомендовал этого делать.
RRULE
. - person Evert   schedule 10.06.2016