Правило повторения — это программа, а не дата
RRULE:FREQ=MONTHLY;BYDAY=-1FR;COUNT=12 не содержит ни одной даты. Оно содержит указания, как их получить, и единственный честный способ ответить на вопрос когда это происходит на самом деле — выполнить эти указания. Этот инструмент их выполняет.
Что применяется
Всё из RFC 5545 §3.3.10: FREQ, INTERVAL, COUNT, UNTIL, WKST, все девять частей BY*, включая отрицательные порядковые номера вроде -1FR («последняя пятница»), и BYSETPOS. Поверх правила EXDATE убирает даты, а RDATE добавляет их, и каждая строка говорит, откуда она взялась: дата, существующая лишь потому, что кто-то вписал её вручную, — это не то же самое, что дата, порождённая правилом.
Зачем столбец со смещением UTC
Еженедельная встреча в 09:00 остаётся в 09:00 и после перевода часов. Момент сдвигается на час, показания настенных часов — нет. Именно этого требует RFC 5545, и именно это наивное «прибавить 7 × 86 400 000 миллисекунд» портит дважды в год. Поэтому у каждого повторения показаны оба значения рядом: местное время и настоящий момент UTC вместе со смещением, которое его дало. Если у двух повторений смещения разные, инструмент говорит об этом прямо.
Пояса определяются по базе IANA вашего браузера, когда TZID — настоящее имя зоны, и по блоку VTIMEZONE внутри файла в остальных случаях: так придуманные Microsoft имена вроде Romance Standard Time по-прежнему разрешаются верно. Когда не срабатывает ни то ни другое, смещение показывается как неизвестное, а не молча принимается за UTC.
Границы, названные прямо
Бесконечное правило разворачивается до заданного вами предела, и результат помечается как усечённый. Правило с невыполнимыми условиями — FREQ=YEARLY;BYMONTH=2;BYMONTHDAY=30 записывается законно и не может совпасть ни с одним настоящим днём — не даёт ничего, и инструмент объясняет почему, вместо того чтобы показать пустую таблицу.
Конфиденциальность
Всё выполняется в вашем браузере. Файл календаря никуда не загружается, и ничто здесь не обращается к сети.
Tiny Online Tools







