2016-06-10 3 views
0

Какое выражение iCal RRULE следует использовать, чтобы найти пятницу после последней среды месяца? Поэтому мне нужно (RRULE: FREQ = MONTHLY; BYDAY = -1WE) + 2 дня ...Как найти пятницу после последней среды месяца?

+1

Кто-то может исправить меня по этому поводу, но я думаю, что это не может быть выражено с помощью «RRULE». – Evert

ответ

1

Я согласен с Evert, что это невозможно с помощью одного RRULE.

Вы можете, однако, достичь этого с помощью комбинации нескольких RRULE.

Таким образом, вы можете разделить ваше мероприятие на несколько событий, каждый из которых имеет один из RRULEs ниже:

Если среда падает на последний или предпоследний день месяца, наша пятница будет 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;BYMONTH=2;BYDAY=FR), так что следующий RRULE будет не правильно до 2040:

FREQ=MONTHLY;BYMONTH=2;BYMONTHDAY=24,25,26,27,28,29;BYDAY=FR 

Если вы обеспокоены високосные года, добавьте EXDATE, как показано ниже, и вы хорошо в течение следующих 100 лет (сделать эти значения даты и время, если дата начала имеет время):

EXDATE;VALUE=DATE:20400224,20680224,20960224,21080224 

Если вы точно знаете, что ваши клиенты поддерживают несколько RRULE (которые были устаревшими в RFC 5545, но все же были полностью действительны в RFC 2445), вы можете добавить их и в одно событие, но я бы не рекомендовал этого.

Смежные вопросы