Что делает этот калькулятор
Калькулятор N-го дня недели в месяце вычисляет точную календарную дату для повторяющихся правил вида «3-й понедельник января» или «1-я пятница декабря». Такие правила встречаются повсюду: например, в США День благодарения приходится на 4-й четверг ноября; на этом же принципе строятся ежемесячные совещания, дни выплаты зарплаты, «дни экспирации» опционов (третья пятница месяца) и графики платежей. Вместо того чтобы вручную отсчитывать клетки в календаре, достаточно выбрать год, месяц, порядковый номер и день недели — и инструмент сразу покажет нужное число месяца.
Как пользоваться
Выберите год и месяц, укажите, какой по счёту день вам нужен (с 1-го по 5-й), и задайте день недели. Калькулятор вернёт соответствующее число месяца. Он также подскажет, существует ли вообще такой по счёту день — 5-й день недели бывает не в каждом месяце — и покажет дату первого подходящего дня недели, чтобы вы видели всю последовательность (для каждого следующего повторения прибавляйте по 7).
Разбор формулы
Сначала определяем день недели, на который приходится 1-е число месяца, — обозначим его f (1 = воскресенье ... 7 = суббота). Чтобы получить первое вхождение нужного дня недели w, прибавляем смещение в \((w - f + 7) \bmod 7\) дней. Каждое следующее вхождение наступает ровно через 7 дней, поэтому n-е вхождение приходится на:
$$\text{день} = 1 + \big((w - f + 7)\bmod 7\big) + (n - 1) \times 7$$
Если полученное значение превышает количество дней в месяце, такого вхождения не существует (например, 5-го вторника не будет в месяце, где вторники выпадают только на 1-е, 8-е, 15-е, 22-е и 29-е число, — а это возможно лишь если в месяце не меньше 29 дней).
Пример расчёта
Найдём 3-й понедельник января 2024 года. 1 января 2024 года — понедельник, значит \(f = 2\) и \(w = 2\). Смещение равно \((2 - 2 + 7) \bmod 7 = 0\), то есть первый понедельник — это 1-е число. Тогда 3-й понедельник: $$1 + 0 + (3 - 1) \times 7 = \mathbf{15}$$ Получаем 15 января 2024 года — и в США это как раз был День Мартина Лютера Кинга.
Частые вопросы
Какая нумерация дней недели используется? От воскресенья = 1 до субботы = 7 — так же, как в выпадающем списке для ввода.
Почему пишет, что такого дня не существует? В некоторых месяцах нужный день недели встречается всего четыре раза. Если вы запросите 5-й, а их только четыре, вычисленное число выходит за пределы месяца, и инструмент отмечает, что такого вхождения нет.
Можно ли найти последний день недели в месяце? Сначала выберите 5-е вхождение: если оно существует, то оно и будет последним; если нет — последним окажется 4-е вхождение.