Генератор повторяющихся дат
Преобразуйте дату начала и правило повторения в полный упорядоченный список дат — ежедневно, еженедельно, ежемесячно или ежегодно, с шаблонами N-го дня недели и последнего дня недели. Посмотрите эквивалентный RRULE и распечатайте или поделитесь расписанием.
Калькулятор
Расписание
Каждую неделю · —
Об этом калькуляторе
Этот генератор раскрывает одну дату начала и правило повторения в полный упорядоченный список дат, а затем отображает его в виде расписания, которое можно распечатать или поделиться. Модель правила основана на стандарте RRULE iCalendar (RFC 5545): частота (ежедневная, еженедельная, ежемесячная или ежегодная), интервал N («каждые N единиц»), опциональный выбор дней недели для еженедельных правил, ежемесячный шаблон (тот же день месяца, «N-й день недели», например 3-я пятница, или последний день недели) и условие окончания — после числа повторений или до даты окончания включительно. Каждая дата отображается с днём недели и в формате ISO 8601 (YYYY-MM-DD), а также со строкой RRULE, которую можно вставить в приложение-календарь.
Как читать результаты
Заголовок содержит количество дат, которые генерирует правило, с первой датой, последней датой и диапазоном в днях. Ниже расписание перечисляет каждое повторение по порядку — его позицию, день недели и ISO-дату — а диаграмма «Повторения по месяцам» показывает, как даты распределяются по календарю. Серая строка RRULE — это то же правило, записанное в синтаксисе RFC 5545 (например RRULE:FREQ=MONTHLY;BYDAY=3FR;COUNT=12 для «3-й пятницы каждого месяца, двенадцать раз»). Даты рассчитываются в UTC, чтобы список никогда не смещался на день из-за перехода на летнее время, а серия ограничена 500 датами — если правило генерирует больше, вы увидите первые 500 с примечанием.
Как выполняется расчёт
Движок считывает дату начала в UTC (Date.UTC), чтобы ни один переход на летнее время не мог сместить день. Для ежедневных, ежемесячных и ежегодных правил он проходит по индексу повторения i = 0, 1, 2 … и строит даты-кандидаты: ежедневный прибавляет i × интервал дней; ежемесячный продвигает i × интервал месяцев и либо сохраняет начальный день месяца (пропуская месяцы, в которых его нет), либо определяет N-й день недели, либо определяет последний день недели; ежегодный продвигает i × интервал лет на начальный месяц и день (пропуская 29 февраля в невисокосные годы). Еженедельные правила привязаны к понедельнику начальной недели и продвигаются вперёд на интервал недель, выдавая каждый выбранный день недели. Любой кандидат до даты начала пропускается; любой несуществующий календарный день пропускается; генерация останавливается по достижении запрошенного количества, включительной даты UNTIL или ограничения в 500 дат. Результат также включает даты, сгруппированные по календарному месяцу, и эквивалентную строку RRULE RFC 5545. Вычисление является чистой функцией без доступа к часам или сети.
Пример расчёта
Установите дату начала 1 января 2026 года, выберите «Ежемесячно», шаблон «N-й день недели», 3-ю пятницу и завершение после 3 повторений.
Генератор возвращает 2026-01-16, 2026-02-20 и 2026-03-20 — 3-ю пятницу каждого месяца — а строка RRULE читается: RRULE:FREQ=MONTHLY;BYDAY=3FR;COUNT=3. Поскольку выводятся только даты начиная с даты начала, 3-я пятница января (16-е) является первой записью.
Частые вопросы
Для чего нужна строка RRULE?
RRULE — это синтаксис правила повторения из RFC 5545, стандарта iCalendar, на котором работают Google Calendar, Apple Calendar, Outlook и большинство инструментов планирования. Генератор записывает ваше правило в одну строку RRULE (FREQ, INTERVAL, BYDAY, COUNT или UNTIL), чтобы вы могли вставить его в событие календаря или файл .ics и воспроизвести там точно такую же серию.
Как обрабатываются невозможные даты, например 31-е число или 29 февраля?
Они пропускаются, никогда не переносятся вперёд — именно так, как указано в RFC 5545. Ежемесячное правило «тот же день», начинающееся с 31-го, срабатывает только в месяцах, в которых есть 31-й день (поэтому февраль, апрель, июнь, сентябрь и ноябрь пропускаются). Ежегодное правило на 29 февраля выполняется только в високосные годы. Генератор никогда незаметно не сдвигает отсутствующую дату на 1-е или 28-е число.
Чем это отличается от поиска N-го дня недели месяца?
Поиск N-го дня недели отвечает на один вопрос — какое число, например, 3-й четверг одного месяца. Этот генератор выдаёт всю повторяющуюся серию: 3-й четверг каждого месяца на столько повторений (или до любой даты окончания), сколько вы запросите, плюс эквивалентный RRULE и печатное расписание.
Есть ли ограничение на количество генерируемых дат?
Да — серия строго ограничена 500 датами. Если вы выберете «до даты» и правило генерирует более 500 повторений, генератор возвращает первые 500 и отмечает, что правило продолжается за пределами показанного диапазона. Подсчёт по повторениям («после N») также ограничен 500.
В каком часовом поясе указаны даты?
Даты являются календарными датами без времени суток и часового пояса — они рассчитываются в UTC для стабильности вычислений. Еженедельное правило с несколькими днями недели привязано к понедельнику недели даты начала (стандартное начало недели по RFC 5545), и в списке отображаются только даты начиная с вашей даты начала.
Популярные сценарии
Источники
Проверено командой YouCalc · Последнее обновление
Заметили неточность в переводе или расчёте, или есть предложение? Напишите нам.