Название, место, дата и время, часовой пояс, повторение, приглашённые, напоминания и заметки — затем скачайте файл .ics или откройте его прямо в календаре. Также можно вставить расписание или прикрепить документ либо фотографию, чтобы создать сразу несколько событий.
Как сделать так, чтобы событие календаря повторялось каждую неделю или каждый месяц?
Повтор — это одна строка в файле .ics: RRULE:FREQ=WEEKLY, где INTERVAL задаёт повтор через каждый второй или третий период, а COUNT или UNTIL завершают серию. Форма ICS Maker задаёт частоту (ежедневно, еженедельно, ежемесячно, ежегодно), интервал и то, никогда ли серия не заканчивается, останавливается ли после определённого числа повторов или идёт до конкретной даты — и записывает RRULE в скачиваемый файл, который читающий его календарь разворачивает самостоятельно, поэтому серия любой длины остаётся одним небольшим файлом. Выбор конкретного дня не предусмотрен формой и требует однострочной правки файла: FREQ=MONTHLY;BYMONTHDAY=-1 для последнего дня месяца, BYDAY=1MO для первого понедельника, BYDAY=MO,TU,WE,TH,FR только для будних дней. На этой странице перечислены двенадцать таких правил, которые можно вставить.
Правило внутри файла
Повтор — это одна строка: RRULE:FREQ=WEEKLY. Календари читают её и сами формируют повторы, поэтому повторяющееся событие остаётся одним небольшим файлом независимо от того, как долго оно длится. Правило также может содержать интервал (INTERVAL=2 для повтора раз в две недели), дату окончания (UNTIL) или ограничение по числу повторов (COUNT).
Конструктор записывает всё это сам. Выберите частоту, задайте интервал — каждые 2 недели, каждые 3 месяца — и укажите, никогда ли серия не заканчивается, останавливается ли после определённого числа повторов или идёт до определённой даты. Полученная строка соответствует стандарту, поэтому календарь, открывающий файл, создаёт именно ту серию, которая описана.
Правила повтора, которые можно вставить
Форма охватывает частоту, интервал и способ завершения серии. Выбор конкретного дня — последнего дня месяца, первого понедельника, только будних дней — требует однострочной правки файла после его скачивания: откройте его в текстовом редакторе и замените строку RRULE: одной из приведённых ниже. Все элементы взяты из RFC 5545, поэтому Google Calendar, Outlook, Apple Calendar и Thunderbird читают их одинаково.
- Каждую неделю, в тот же день
RRULE:FREQ=WEEKLY- Через неделю (раз в две недели)
RRULE:FREQ=WEEKLY;INTERVAL=2- Каждый будний день, с понедельника по пятницу
RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR- 1-е число каждого месяца
RRULE:FREQ=MONTHLY;BYMONTHDAY=1- Последний день каждого месяца
RRULE:FREQ=MONTHLY;BYMONTHDAY=-1- Первый понедельник каждого месяца
RRULE:FREQ=MONTHLY;BYDAY=1MO- Последняя пятница каждого месяца
RRULE:FREQ=MONTHLY;BYDAY=-1FR- Последний рабочий день каждого месяца
RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1- Каждые три месяца (раз в квартал)
RRULE:FREQ=MONTHLY;INTERVAL=3- Каждый год, в дату начала
RRULE:FREQ=YEARLY- Двенадцать раз, затем остановиться
RRULE:FREQ=MONTHLY;COUNT=12- Еженедельно до фиксированной даты
RRULE:FREQ=WEEKLY;UNTIL=20261231T235959Z
Как части складываются вместе
FREQ — единственная обязательная часть; всё остальное её уточняет. INTERVAL пропускает периоды, поэтому FREQ=WEEKLY;INTERVAL=2 означает «через каждую вторую неделю», а не «через каждый второй день». BYDAY принимает двухбуквенные коды дней недели, а число перед кодом выбирает конкретное вхождение в месяце — 1MO означает первый понедельник, -1FR — последнюю пятницу. BYMONTHDAY вместо этого считает даты и при отрицательном значении отсчитывает их от конца месяца, благодаря чему BYMONTHDAY=-1 — это надёжный способ указать «последний день». BYSETPOS выбирает из того, что уже подошло под остальную часть правила в каждом периоде, поэтому список будних дней вместе с BYSETPOS=-1 приводит к последнему рабочему дню.
Какую частоту выбрать
Еженедельная привязана к дню недели, выбранному для даты начала, ежемесячная — к числу месяца. Ежемесячное событие 31-го числа — классическая ловушка: месяцы, в которых нет такого дня, большинство календарей пропускают, а не переносят, поэтому используйте BYMONTHDAY=-1, если имеется в виду последний день каждого месяца, а не начинайте серию 31-го числа в надежде, что всё сработает.
Вопросы
- Как остановить повторяющееся событие?
- Установите для параметра «Повтор заканчивается» число повторов или конечную дату, и файл будет содержать соответственно COUNT или UNTIL. Оставьте значение «Никогда», и серия будет продолжаться до тех пор, пока вы не завершите её в своём календаре, который всегда может изменить импортированную серию.
- В чём разница между COUNT и UNTIL?
- COUNT останавливает серию после определённого числа повторов — COUNT=12 даёт ровно двенадцать и не больше, независимо от того, на какие даты они выпадают. UNTIL останавливает серию в определённый момент времени, записанный как метка времени UTC, например UNTIL=20261231T235959Z, и любое событие, которое должно было бы произойти позже, просто не происходит. Они решают одну и ту же задачу с разных сторон, и RFC 5545 не допускает использования обоих одновременно в одном правиле.
- Можно ли сделать так, чтобы событие повторялось через неделю?
- Да — выберите «Еженедельно» и установите интервал равным 2. В файле для правила повтора появится INTERVAL=2, которое любой календарь прочитает как повтор раз в две недели. То же самое работает для повтора каждые 3 дня, каждые 6 месяцев и так далее.
- Как настроить повтор в последний день каждого месяца?
- Используйте FREQ=MONTHLY;BYMONTHDAY=-1 — это правка скачанного файла вручную: форма задаёт частоту, интервал и окончание, но не то, какой именно день месяца выбирается. Отрицательные числа отсчитываются от конца, поэтому дата попадёт на 28-е, 29-е, 30-е или 31-е число в зависимости от месяца. Начинать ежемесячную серию 31-го числа вместо этого — распространённая ошибка: большинство календарей пропускают месяцы, в которых нет 31-го числа, вместо того чтобы переносить событие.
- Как пропустить одно повторение серии?
- Добавьте строку EXDATE рядом с RRULE, указав время начала повторения, которое нужно убрать, — EXDATE:20261225T090000Z удаляет только это событие, оставляя остальные. Чтобы перенести его, а не удалить, добавьте EXDATE вместе со вторым VEVENT, у которого тот же UID и RECURRENCE-ID, указывающий на исходный слот.
- Сохранится ли повтор при импорте в Outlook или Google?
- Да. RRULE — часть стандарта RFC 5545, и оба сервиса его читают, как и Apple Calendar, и Thunderbird. При импорте они сами разворачивают серию, а не хранят каждое повторение отдельно.