Как вычислить день недели по дате (The day of the week)
Что они ни делают, не идут дела,
Видно в понедельник их мама родила.
(песня «Остров невезения» из кинофильма «Бриллиантовая рука»)
Пожалуй, каждый хотел бы знать, в какой день недели он родился. Это можно установить по дате рождения. А вообще, для установления дня недели по дате существуют алгоритмы. Это математическая задача, которая решается средствами модулярной арифметики, то есть арифметики остатков. Конечно, существуют и вечные календари, которые вы можете носить в кармане, и даже с голосовым интерфейсом, или онлайн калькуляторы. Далее мы расскажем о математике, заложенной в таких календарях.
Вот одна из формул для таких расчётов. Её можно вычислять вручную или составить программу. Речь идёт о расчётах в григорианском календаре (новый стиль, с 1582 года).
Вычисления проводятся по формуле:
ДН = Д + Г + [Г/4] + [С/4] – 2С + К (mod 7)
• ДН — определяемый день недели (0 — воскресенье, 1 — понедельник, ..., 6 — суббота);
• Д — дата (число от 1 до 31);
• Г — год в столетии (последние две цифры года в четырёхзначной записи года);
• С — столетие (первые две цифры года);
• К — месячный коэффициент (январь = 6, в високосный год 5; февраль = 2, в високосный год 1; март = 2; апрель = 5; май = 0; июнь = 3; июль = 5; август = 1; сентябрь = 4; октябрь = 6; ноябрь = 2; декабрь = 4);
• [ ] — означает целую часть числа (наибольшее целое число, не превосходящее данное число);
• (mod 7) — от правой части выражения вычисляется остаток от деления на 7.
На каких принципах основаны эти расчёты:
• каждый седьмой день месяца имеет то же название, что и предыдущий;
• обязательно учитывается високосный год.
Пример
13 ноября 2023 года — был понедельник.
Здесь: Д = 13, Г = 23, С = 20, К = 2.
ДН = 13 + 23 + 5 + 5 – 40 + 2 = 8 = 1 (mod 7). Это точно был понедельник.
P. S. Календарный устный счёт — это одна из дисциплин на чемпионатах мира по ментальной арифметике, которые проводятся каждые два года, начиная с 2004 года. Максимально возможное количество дней недели для дат с 1600 до 2100 годы по григорианскому календарю должно быть определено в течение одной минуты. Мировой рекорд — 140 расчётов в минуту — был установлен в 2018 году.