Рассчитать день недели по дате
6 июня 1944 года – вторник. 12 апреля 1961 года – среда. 1 января 2000 года – суббота. За каждой исторической датой скрывается конкретный день недели, и узнать его можно без справочника – с помощью чистой арифметики. Ниже – калькулятор, который мгновенно определит день недели для любой даты, а затем – разбор формул, позволяющих рассчитать день недели вручную.
Пошаговый расчёт по формуле Зеллера
Нажмите на событие, чтобы проверить дату в калькуляторе:
Калькулятор работает для дат григорианского календаря (с 15 октября 1582 года).
Калькулятор принимает день, месяц и год, после чего определяет день недели по этой дате. Результат отображается в виде названия дня на русском языке и его порядкового номера (1 – понедельник, 7 – воскресенье). Расчёт основан на формуле Зеллера – одном из наиболее точных и компактных алгоритмов для этой задачи.
Почему день недели вообще можно рассчитать
Григорианский календарь – строго периодическая система. Его цикл составляет ровно 400 лет, или 146 097 дней. Это число делится на 7 без остатка (146 097 = 20 871 × 7), а значит, через каждые 400 лет дни недели повторяются в точности. Любая дата однозначно отображается на один из семи дней – задача сводится к нахождению остатка от деления.
Три фактора влияют на результат:
- Базовый сдвиг года. Обычный год содержит 365 дней (52 недели + 1 день), поэтому каждый новый год начинается на один день позже предыдущего.
- Високосная поправка. Високосный год добавляет ещё один день сдвига. Високосным считается год, делящийся на 4, за исключением кратных 100, но с включением кратных 400.
- Сдвиг месяца. Каждый месяц содержит разное число дней, сдвигая день недели на фиксированную величину относительно начала года.
Все формулы ниже комбинируют эти три компонента, различаясь лишь способом вычисления.
Формула Зеллера: точный расчёт за 6 шагов
Конгруэнция Зеллера (Zeller’s congruence) – формула, предложенная немецким математиком Кристианом Зеллером в 1887 году. Она работает для любой даты григорианского календаря.
Подготовка
Январь и февраль считаются 13-м и 14-м месяцами предыдущего года. Если дата – 15 февраля 2026, подставляем месяц = 14, год = 2025.
Формула
$$h = \left( q + \left\lfloor \frac{13(m+1)}{5} \right\rfloor + K + \left\lfloor \frac{K}{4} \right\rfloor + \left\lfloor \frac{J}{4} \right\rfloor - 2J \right) \mod 7$$Где:
| Обозначение | Значение |
|---|---|
| q | День месяца |
| m | Номер месяца (3 = март, 4 = апрель, …, 14 = февраль) |
| K | Год в столетии (последние 2 цифры года) |
| J | Столетие (первые 2 цифры года) |
| h | Результат: 0 = суббота, 1 = воскресенье, 2 = понедельник, …, 6 = пятница |
Символ ⌊ ⌋ означает округление вниз (целую часть), mod 7 – остаток от деления на 7.
Пример: 9 мая 2026 года
- q = 9, m = 5, год = 2026 → K = 26, J = 20
- ⌊13 × (5 + 1) / 5⌋ = ⌊78 / 5⌋ = 15
- ⌊K / 4⌋ = ⌊26 / 4⌋ = 6
- ⌊J / 4⌋ = ⌊20 / 4⌋ = 5
- h = (9 + 15 + 26 + 6 + 5 − 40) mod 7 = 21 mod 7 = 0
- Результат 0 – суббота
Проверяем по календарю 2026: 9 мая действительно приходится на субботу.
Алгоритм судного дня Конвея: расчёт в уме
Британский математик Джон Конвей разработал метод, оптимизированный для устного счёта. Идея – в каждом году есть набор легко запоминаемых дат, которые гарантированно выпадают на один и тот же день недели. Этот день называется Doomsday (судный день) года.
Опорные даты (одинаковый день недели)
| Месяц | Опорная дата | Мнемоника |
|---|---|---|
| Январь | 3 (или 4 в високосный) | – |
| Февраль | 28 (или 29 в високосный) | Последний день |
| Март | 7 | 7 марта |
| Апрель | 4 | 4/4 |
| Май | 9 | – |
| Июнь | 6 | 6/6 |
| Июль | 11 | 7/11 |
| Август | 8 | 8/8 |
| Сентябрь | 5 | – |
| Октябрь | 10 | 10/10 |
| Ноябрь | 7 | – |
| Декабрь | 12 | 12/12 |
Для чётных месяцев с апреля мнемоника проста: 4/4, 6/6, 8/8, 10/10, 12/12. Для нечётных – «9 работает на 5, а 5 на 9; 7 на 11, а 11 на 7» (рифма «I work 9-to-5 at the 7-Eleven»).
Как найти Doomsday года
Шаг 1. Определите Doomsday столетия:
| Столетие (первые 2 цифры) | Doomsday |
|---|---|
| …17xx | воскресенье |
| …18xx | пятница |
| …19xx | среда |
| …20xx | вторник |
Цикл повторяется каждые 400 лет.
Шаг 2. К Doomsday столетия прибавьте поправку на год внутри столетия. Быстрая формула: разделите последние 2 цифры года (y) на 12 – запомните частное (a) и остаток (b). Разделите остаток на 4 – получите (c). Doomsday года = Doomsday столетия + a + b + c (mod 7).
Пример: 23 февраля 2026
- Столетие 20xx → Doomsday столетия = вторник (2)
- y = 26. a = ⌊26/12⌋ = 2, b = 26 − 24 = 2, c = ⌊2/4⌋ = 0
- Doomsday 2026 = 2 + 2 + 2 + 0 = 6 → суббота
- Опорная дата февраля: 28 февраля – суббота
- 23 февраля – на 5 дней раньше 28-го → суббота − 5 = понедельник
23 февраля 2026 – понедельник. Верно.
Метод Томохико Сакамото: компактный алгоритм для программистов
Японский программист Томохико Сакамото предложил лаконичный алгоритм, который легко реализовать на любом языке программирования. Вся магия – в таблице смещений месяцев.
t = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]
если месяц < 3: год = год − 1
w = (год + год/4 − год/100 + год/400 + t[месяц − 1] + день) mod 7
Результат: 0 = воскресенье, 1 = понедельник, …, 6 = суббота.
Алгоритм умещается в 5 строк кода и не требует условий для каждого месяца – всю неравномерность длин месяцев компенсирует таблица t. Это один из самых популярных способов рассчитать день недели в программном коде.
Пример на Python
def day_of_week(year, month, day):
t = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]
if month < 3:
year -= 1
return (year + year // 4 - year // 100 + year // 400 + t[month - 1] + day) % 7
Вызов day_of_week(2026, 5, 9) вернёт 6 – суббота.
Какой метод выбрать
| Критерий | Формула Зеллера | Алгоритм Конвея | Метод Сакамото |
|---|---|---|---|
| Назначение | Универсальный расчёт | Устный счёт | Программирование |
| Скорость в уме | Средняя (6 шагов) | Высокая (после тренировки) | Неудобен без компьютера |
| Запоминание | Одна формула | 12 опорных дат + правило | Таблица из 12 чисел |
| Реализация в коде | Просто | Многовато условий | Идеально (5 строк) |
| Точность | 100% для григорианского календаря | 100% | 100% |
Если вы хотите удивлять друзей – осваивайте алгоритм Конвея. Для разовой проверки используйте калькулятор выше. Для интеграции в программный проект – метод Сакамото.
Практические применения
Умение рассчитать день недели по дате пригождается чаще, чем кажется.
Планирование событий. На какой день выпадет ваш день рождения через 5 лет? Когда следующий Новый год придётся на пятницу? (Ближайший – 1 января 2027 года.)
Историческое исследование. Установление точного дня недели событий: Бородинская битва (7 сентября 1812) – понедельник, высадка на Луну (20 июля 1969) – воскресенье.
Криминалистика и верификация документов. Несовпадение дня недели и даты в документе может указывать на фальсификацию.
Программирование. Расчёт рабочих дней, генерация расписаний, валидация пользовательского ввода дат.
Проверочная таблица: памятные даты
| Дата | День недели | Событие |
|---|---|---|
| 7 ноября 1917 | среда | Октябрьская революция |
| 22 июня 1941 | воскресенье | Начало ВОВ |
| 12 апреля 1961 | среда | Полёт Гагарина |
| 20 июля 1969 | воскресенье | Высадка на Луну |
| 1 января 2000 | суббота | Миллениум |
| 24 февраля 2022 | четверг | – |
| 1 января 2026 | четверг | Текущий год |
Таблица позволяет быстро проверить любую из формул или калькулятор.
Резюме
Рассчитать день недели для любой даты можно тремя способами: формулой Зеллера (подставляете числа и считаете), алгоритмом Конвея (опорные даты + простая арифметика в уме) или методом Сакамото (5 строк кода). Все три метода дают одинаковый результат – выбор зависит от контекста.
Для мгновенного ответа используйте калькулятор на этой странице, а для тренировки навыка – начните с алгоритма Конвея и проверяйте себя по таблице выше. Через неделю практики вы сможете назвать день недели для любой даты за 15–20 секунд.
Часто задаваемые вопросы
Работает ли формула Зеллера для дат до 15 октября 1582 года?
Классическая формула Зеллера рассчитана на григорианский календарь. Для юлианского календаря (до 15 октября 1582 года) используется модифицированная версия, в которой поправка на столетие заменяется на фиксированное слагаемое 5.
Почему в формулах январь и февраль относят к предыдущему году?
Это связано с високосным днём 29 февраля. Если считать год начинающимся с марта, високосный день оказывается последним в году и не сдвигает нумерацию месяцев. Такой приём упрощает математику и устраняет необходимость отдельной проверки високосности.
Какой самый быстрый способ определить день недели в уме?
Алгоритм судного дня Джона Конвея позволяет назвать день недели за 10–20 секунд после тренировки. Достаточно запомнить опорные даты для каждого месяца и научиться быстро находить «судный день» года. Сам Конвей выполнял расчёт менее чем за 2 секунды.
Совпадают ли дни недели у разных лет?
Да. Календарь полностью повторяется через цикл в 400 лет (точное число уникальных календарей – 14). Обычный год сдвигает день недели на 1, високосный – на 2. Например, календарь 2026 года совпадает с календарём 2015 года.
Как узнать день недели в Excel или Google Sheets?
Функция ДЕНЬНЕД (WEEKDAY) возвращает номер дня недели для указанной даты. По умолчанию 1 – воскресенье, 7 – суббота. Второй аргумент позволяет изменить начало отсчёта: значение 2 делает понедельник первым днём.
Верно ли, что 13-е число чаще выпадает на пятницу?
Да, это математический факт. За полный 400-летний цикл григорианского календаря 13-е число приходится на пятницу 688 раз – чаще, чем на любой другой день недели. Разница невелика: реже всего 13-е выпадает на четверг и субботу (по 684 раза).
Можно ли рассчитать день недели для дат далёкого будущего?
Формулы работают для любой даты григорианского календаря без ограничений. Однако после нескольких тысяч лет накопится расхождение между календарём и астрономическим годом (примерно 1 день за 3 236 лет), и реальный календарь может быть скорректирован.