# Генератор повторяющихся дат

> Преобразуйте дату начала и правило повторения в полный список дат — ежедневно, еженедельно, ежемесячно или ежегодно — с правилом RRULE и печатным расписанием.

- **Category:** Дата и время
- **Interactive calculator:** https://youcalc.com/ru/date-time/recurring-date-generator/
- **Price:** Free, no sign-up required

## Overview

Этот генератор раскрывает одну дату начала и правило повторения в полный упорядоченный список дат, а затем отображает его в виде расписания, которое можно распечатать или поделиться. Модель правила основана на стандарте RRULE iCalendar (RFC 5545): частота (ежедневная, еженедельная, ежемесячная или ежегодная), интервал N («каждые N единиц»), опциональный выбор дней недели для еженедельных правил, ежемесячный шаблон (тот же день месяца, «N-й день недели», например 3-я пятница, или последний день недели) и условие окончания — после числа повторений или до даты окончания включительно. Каждая дата отображается с днём недели и в формате ISO 8601 (YYYY-MM-DD), а также со строкой RRULE, которую можно вставить в приложение-календарь.

## How to read your result

Заголовок содержит количество дат, которые генерирует правило, с первой датой, последней датой и диапазоном в днях. Ниже расписание перечисляет каждое повторение по порядку — его позицию, день недели и ISO-дату — а диаграмма «Повторения по месяцам» показывает, как даты распределяются по календарю. Серая строка RRULE — это то же правило, записанное в синтаксисе RFC 5545 (например RRULE:FREQ=MONTHLY;BYDAY=3FR;COUNT=12 для «3-й пятницы каждого месяца, двенадцать раз»). Даты рассчитываются в UTC, чтобы список никогда не смещался на день из-за перехода на летнее время, а серия ограничена 500 датами — если правило генерирует больше, вы увидите первые 500 с примечанием.

## Method

Движок считывает дату начала в UTC (Date.UTC), чтобы ни один переход на летнее время не мог сместить день. Для ежедневных, ежемесячных и ежегодных правил он проходит по индексу повторения i = 0, 1, 2 … и строит даты-кандидаты: ежедневный прибавляет i × интервал дней; ежемесячный продвигает i × интервал месяцев и либо сохраняет начальный день месяца (пропуская месяцы, в которых его нет), либо определяет N-й день недели, либо определяет последний день недели; ежегодный продвигает i × интервал лет на начальный месяц и день (пропуская 29 февраля в невисокосные годы). Еженедельные правила привязаны к понедельнику начальной недели и продвигаются вперёд на интервал недель, выдавая каждый выбранный день недели. Любой кандидат до даты начала пропускается; любой несуществующий календарный день пропускается; генерация останавливается по достижении запрошенного количества, включительной даты UNTIL или ограничения в 500 дат. Результат также включает даты, сгруппированные по календарному месяцу, и эквивалентную строку RRULE RFC 5545. Вычисление является чистой функцией без доступа к часам или сети.

## Example

- **Setup:** Установите дату начала 1 января 2026 года, выберите «Ежемесячно», шаблон «N-й день недели», 3-ю пятницу и завершение после 3 повторений.
- **Result:** Генератор возвращает 2026-01-16, 2026-02-20 и 2026-03-20 — 3-ю пятницу каждого месяца — а строка RRULE читается: RRULE:FREQ=MONTHLY;BYDAY=3FR;COUNT=3. Поскольку выводятся только даты начиная с даты начала, 3-я пятница января (16-е) является первой записью.

## Frequently asked questions

### Для чего нужна строка 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), и в списке отображаются только даты начиная с вашей даты начала.

## Related calculators

- [Поиск N-го дня недели в месяце](https://youcalc.com/ru/date-time/nth-weekday-finder/)
- [Планировщик сроков проекта](https://youcalc.com/ru/date-time/deadline-planner/)
- [Калькулятор графика сменности (4-4, Панама)](https://youcalc.com/ru/date-time/shift-pattern-calculator/)
- [Конструктор расписания занятий](https://youcalc.com/ru/date-time/timetable-calculator/)

## Sources

- https://datatracker.ietf.org/doc/html/rfc5545
- https://en.wikipedia.org/wiki/ISO_8601

---

Interactive version: https://youcalc.com/ru/date-time/recurring-date-generator/ · From YouCalc — https://youcalc.com
