Какой сегодня день недели: как узнать день недели любой даты

5 ноября 2026 г.
Какой сегодня день недели: как узнать день недели любой даты

Вопрос «какой сегодня день недели» кажется таким же простым, как взгляд на календарь. Пока речь о сегодняшнем дне, всё действительно решается одним взглядом. Сложности начинаются в других случаях: нужно назвать день недели для даты из будущего, посчитать, на какой день попадёт дедлайн или выписка, сравнить две версии расписания, вспомнить, каким был конкретный вторник три года назад. Обычный календарь в таких случаях не помощник: он показывает только то, что уже наступило или наступает в этом году.

Почему счёт дня недели устроен не так, как кажется

Дней в неделе всегда семь, и это сильно упрощает задачу: достаточно знать одну опорную дату, а дальше всё сводится к сложению и остатку от деления на 7. Остаток 0 означает тот же день недели, 1 означает следующий, и так далее по кругу. Проблема в том, что опорную дату нужно где-то взять, а сдвиги между месяцами неодинаковы: в январе 31 день, в апреле 30, в феврале 28, и каждый месяц двигает счёт на своё число дней.

Добавьте сюда 29 февраля, которое появляется раз в четыре года и добавляет к календарю лишний день. После него любой дальнейший счёт по правилу «длина предыдущего месяца плюс один» даст неверный результат, причём ошибка будет выглядеть правдоподобно: день недели сдвинется ровно на единицу, и человек решит, что ошибся в чём-то другом.

Быстрый ответ без всякой теории

Для большинства задач считать вручную не нужно вообще. Откройте калькулятор дня недели, впишите дату в поле (кнопка «Сегодня» подставляет текущую) и сразу получите ответ. Одновременно он показывает три вещи, которые обычно ищут вместе с днём недели: порядковый номер дня в году вместе с общим числом дней, номер недели по ISO 8601 и признак високосного года. Отдельными карточками ниже лежат четыре исторические даты, по которым удобно проверять счёт: 12 апреля 1961 года, 20 июля 1969 года, 9 мая 1945 года и 1 января 2000 года. По клику они подставляются в поле даты.

  • день недели на вашем языке, будь то «вторник» или «Tuesday»;
  • номер дня в году и общее число дней в этом году (365 или 366);
  • номер недели по ISO 8601, где недели идут с понедельника;
  • дату в человекочитаемом виде, её можно скопировать одной кнопкой.

Если задача шире, чем «назвать день», подключайте соседние инструменты: калькулятор разницы дат посчитает интервал между двумя датами, форматтер дат покажет ту же дату сразу во всех популярных форматах, включая Unix-время, а конвертер Unix-времени пригодится, когда день недели известен, а время нет. Что такое timestamp и почему он всегда привязан к UTC, разобрано в статье про форматы дат.

Правило Зейлера: формула, которая работает всегда

Христианские календари веками вычисляли день недели арифметически, без календаря в кармане. Классический способ придумал австрийский математик и астроном Иоганн Зейлер в 1582 году, в год введения григорианского календаря. С тех пор формула почти не менялась: она работает с любой датой и не требует промежуточных вычислений.

Формула Зейлера для григорианского календаря
h = (q + ⌊13(m+1)/5⌋ + K + ⌊K/4⌋ + ⌊J/4⌋ + 5J) mod 7

q  - число месяца (1…31)
m  - месяц по счёту с марта: март = 3 … декабрь = 12,
     январь = 13 и февраль = 14 (тогда год уменьшают на 1)
K  - последние две цифры года (0…99)
J  - первые две цифры года, то есть век (0…19)

Остаток h означает день недели:
0 - суббота, 1 - воскресенье, 2 - понедельник, 3 - вторник,
4 - среда, 5 - четверг, 6 - пятница

Смысл приёма в том, что месяцы перенумеровываются так, чтобы март оказался третьим. Тогда длины месяцев идут подряд как 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, и множитель 13/5 в формуле работает как «месяц плюс один, делённый на пять», что и даёт нужное смещение для каждого месяца. Январь и февраль приравниваются к 13 и 14 предыдущего года, потому что при таком счёте они оказываются в конце года, а не в начале, и вся арифметика остаётся в одном ритме.

Разбор на конкретной дате

Возьмём 3 ноября 2026 года. Здесь m = 11, поэтому год менять не нужно: K = 26, J = 20, q = 3. Дальше всё сводится к сложению и одному делению.

3 ноября 2026: по шагам
q = 3, m = 11, K = 26, J = 20

⌊13(m+1)/5⌋ = ⌊13 × 12 / 5⌋ = ⌊156 / 5⌋ = 31
⌊K/4⌋      = ⌊26 / 4⌋ = 6
⌊J/4⌋      = ⌊20 / 4⌋ = 5
5J          = 5 × 20 = 100

h = (3 + 31 + 26 + 6 + 5 + 100) mod 7
h = 171 mod 7
h = 3  →  вторник

Остаток 3 в принятой нумерации означает вторник. Это сходится с тем, что показывает любой календарь: 3 ноября 2026 года действительно вторник, по ISO 8601 это 45-я неделя, вторник, 307-й день года из 365.

Проверка на 1 января 2000 года

Формулу стоит проверить на дате, результат которой известен наверняка. 1 января 2000 года было субботой, и это легко запомнить: именно с этого дня в обращении оказался 2000-й год, тот самый, который все считали високосным. Подставляем январь как 13-й месяц и уменьшаем год на единицу: m = 13, K = 99, J = 19, q = 1.

1 января 2000: контрольная проверка
q = 1, m = 13, K = 99, J = 19

⌊13(m+1)/5⌋ = ⌊13 × 14 / 5⌋ = ⌊182 / 5⌋ = 36
⌊K/4⌋      = ⌊99 / 4⌋ = 24
⌊J/4⌋      = ⌊19 / 4⌋ = 4
5J          = 5 × 19 = 95

h = (1 + 36 + 99 + 24 + 4 + 95) mod 7
h = 259 mod 7
h = 0  →  суббота

Остаток ноль означает субботу, всё сошлось. Проверить можно и на 1 января 2020 года: там q = 1, m = 13, K = 19, J = 20, сумма даёт 165, остаток 4, то есть среда, и это действительно была среда. Одна формула покрывает любой год григорианского календаря, а менять в ней надо всего четыре числа.

Считаем от известной даты: таблица сдвигов

Если формула кажется слишком тяжёлой, есть способ за пару минут, который работает на бумаге. Смысл такой: сдвиг с одной даты на другую определяется числом дней между ними, а число дней между датами одного и того же числа месяца равно длине промежуточных месяцев. Остаётся превратить эти длины в сдвиг по дням недели.

  • 31 день в месяце даёт сдвиг +3, потому что 31 это 4 недели и 3 дня;
  • 30 дней дают сдвиг +2;
  • 28 дней, то есть февраль обычного года, дают сдвиг 0, иначе говоря тот же день недели;
  • 29 дней, то есть февраль високосного года, дают сдвиг +1.

Проверим на живом примере. Пусть известно, что 1 января 2026 года был четвергом. До 1 ноября набралось 304 дня (январь 31, февраль 28, март 31, апрель 30, май 31, июнь 30, июль 31, август 31, сентябрь 30, октябрь 31), а до 15 ноября ещё 14 дней, итого 318. Дальше 318 mod 7 = 3, то есть четверг плюс три дня, то есть воскресенье. По календарю 15 ноября 2026 года действительно воскресенье.

Опорные дни 2026 года: 1-е число каждого месяца
январь   1 января 2026   - четверг
февраль  1 февраля 2026  - воскресенье
март     1 марта 2026     - воскресенье
апрель   1 апреля 2026   - среда
май      1 мая 2026       - пятница
июнь     1 июня 2026      - понедельник
июль     1 июля 2026      - среда
август   1 августа 2026  - суббота
сентябрь 1 сентября 2026 - вторник
октябрь  1 октября 2026  - четверг
ноябрь   1 ноября 2026   - воскресенье
декабрь  1 декабря 2026  - вторник

Такую же табличку удобно держать для 1 января каждого года: 2026-й начинается в четверг, 2027-й в пятницу, 2028-й в субботу, 2029-й в понедельник, 2030-й во вторник, 2031-й в среду, 2032-й в четверг. Здесь работает простое правило: обычный год сдвигает 1 января на следующий день недели, а високосный на два, потому что в нём 366 дней, это 52 недели и 2 дня.

29 февраля и почему после него счёт сбивается

В високосный год календарь длиннее на один день, и этот день стоит ровно посередине. В 2024 году 29 февраля был четвергом. В 2026 году 28 февраля, на ту же самую дату, уже суббота: два года разницы дали сдвиг на два дня, потому что между ними успел попасть високосный 2024-й. Значит, прибавляя «длину месяца» от февраля к марту, в високосном году нужно брать 29, а не 28.

Февраль меняет всё, что дальше
28 февраля 2026 - суббота        29 февраля 2024 - четверг
1 марта 2026    - воскресенье    1 марта 2024    - пятница

Именно поэтому «посчитать от Нового года» в високосном и обычном году даёт разные ответы, если держаться таблицы «31 день на месяц». Сравните 15 января и 15 марта: в 2026 году между ними 59 дней, это 16 дней остатка января, 28 дней февраля и 15 дней марта, а в 2024-м уже 60, потому что февраль длиннее на один день. День недели в обоих случаях тоже разный: в 2026-м 15 марта это воскресенье, в 2024-м пятница.

Excel, Python и JavaScript

В Excel всё считается одной формулой. Функция WEEKDAY с двумя аргументами возвращает номер от 1 до 7, где 1 это понедельник: =WEEKDAY(A1;2). В русской версии Excel разделителем аргументов служит точка с запятой, в английской запятая. Функция TEXT с шаблоном «dddd» вернёт название дня недели, но на русской локали это будет «вторник», а на английской «Tuesday», поэтому в формулах, которые уезжают за границу, надёжнее опираться на число. То же самое даёт =TEXT(A1;»[$-409]dddd»), если нужна именно английская версия без всякой локализации.

Excel: день недели без локализации
=WEEKDAY(A1;2)                 → 2 (вторник), если в A1 стоит 03.11.2026
=CHOOSE(WEEKDAY(A1;2);"Пн";"Вт";"Ср";"Чт";"Пт";"Сб";"Вс")
=TEXT(A1;"[$-409]dddd")       → "Tuesday"
=NETWORKDAYS(A1;B1)            → число рабочих дней между датами
=DATEDIF(A1;B1;"d")           → интервал в днях одной формулой

В Python всё работает на объектах даты. Метод weekday() нумерует дни от нуля, где ноль это понедельник, а isoweekday() от единицы, где единица это понедельник, то есть ближе к ISO. Вывод strftime(«%A») даёт полное название дня недели на английском, а чтобы получить русское, нужна библиотека локалей или простая таблица на семь элементов. Номер недели по ISO 8601 тоже берётся одной строкой: date.isocalendar() возвращает тройку (год, неделя, день недели).

Python: день недели, номер недели, разница дат
from datetime import date

d = date(2026, 11, 3)

d.weekday()             # 1  → вторник (0 = понедельник)
d.isoweekday()          # 2  → ISO: понедельник = 1
d.strftime('%A')        # 'Tuesday'
d.timetuple().tm_yday   # 307 → номер дня в году
d.isocalendar()         # IsoCalendarDate(year=2026, week=45, weekday=2)

# разница в днях между двумя датами
(date(2027, 1, 1) - date(2026, 11, 3)).days   # 59

В JavaScript с этим есть две тонкости, на которых спотыкаются чаще всего. Первая: конструкция new Date(«2026-11-03») разбирается как полночь по UTC, а метод getDay() смотрит на локальное время, поэтому у пользователя в минусовом поясе день недели получится на единицу меньше. Вторая: в датах, которые переводят локальное время, между двумя полуночами может оказаться 23 или 25 часов, и наивное деление на 86 400 000 даст дробное число. Для календарной арифметики надёжнее работать через Date.UTC.

JavaScript: день недели и разница в днях
// День недели: понедельник = 1 ... воскресенье = 7
const iso = (d) => d.getDay() === 0 ? 7 : d.getDay();
iso(new Date(2026, 10, 3));            // 2 (вторник)

// Название дня недели под локаль
new Date(2026, 10, 3).toLocaleDateString("ru-RU", { weekday: "long" });
// → "вторник"

// Разница в днях без привязки к часовым поясам
const a = Date.UTC(2026, 10, 3), b = Date.UTC(2027, 0, 1);
(b - a) / 86400000;                    // 59

Неделя по ISO 8601 и нумерация дней недели

Неделя по ISO 8601 начинается с понедельника, а первая неделя года та, в которой находится первый четверг. Из этого следует правило, которое многих удивляет: 1 января не обязательно принадлежит первой неделе своего года. 1 января 2027 года, например, относится к 53-й неделе 2026 года, потому что в 2026-м было 53 ISO-недели. А первая неделя 2027 года начинается 4 января, в понедельник, и именно с этого дня 2027 год получает первую неделю.

  • ISO 8601: понедельник это 1, воскресенье 7, неделя начинается с понедельника;
  • ISO 8601: неделя 1 это неделя с первым четвергом, её начало всегда приходится на 4 января или рядом;
  • POSIX и strftime: воскресенье это 0, понедельник 1, далее до субботы 6;
  • Excel без второго аргумента: воскресенье 1, понедельник 2;
  • Excel с типом 3: понедельник 0, воскресенье 6;
  • .NET и старые API: воскресенье 0, понедельник 1.

Термин «нулевой день недели» как раз про это расхождение. В Unix-конвенции и в Python функция strftime с параметром %w отдаёт воскресенье как 0, а понедельник как 1, то есть неделя при этом идёт с воскресенья. В ISO 8601 нулевого дня нет, дни пронумерованы с 1. Когда в чужом API попадается поле day_of_week со значениями от нуля, сначала выясните, какая это система нумерации, иначе понедельник превратится в воскресенье, а воскресенье в субботу.

Частые вопросы

Какой день недели был 1 января 2020 года?

Среда. Проверяется это и по формуле Зейлера, и по счёту от 1 января 2026 года, которое было четвергом: между ними ровно шесть лет, из них високосными были 2020-й и 2024-й, то есть 6 × 365 + 2 = 2192 дня, а 2192 mod 7 = 1, значит, день недели сдвинулся на шаг назад от четверга, то есть на среду. Второй ориентир: 1 января 2027 года было пятницей, и до него от Нового 2020 года ровно 2557 дней, а это сдвиг на два дня вперёд от среды, то есть на пятницу.

Почему 29 февраля меняет счёт?

Потому что 29 февраля есть в календаре раз в четыре года и добавляет ровно один день. Если вы считали по правилу «возьми длину предыдущего месяца» и в феврале взяли 28 дней, то все даты с 1 марта и дальше уедут на один день недели. В високосном году правило простое: в феврале 29 дней, значит сдвиг с 29 февраля на 1 марта равен +1, тогда как в обычном году 28 февраля и 1 марта всегда приходятся на один и тот же день недели.

Как считать неделю по ISO 8601?

Неделя начинается в понедельник, а номер первой недели определяется по первому четвергу года: неделя 1 это та, в которую попадает 4 января. Отсюда практическое правило: если 1 января приходится на четверг, пятницу, субботу или воскресенье, то оно принадлежит последней неделе предыдущего года. В 2026 году 1 января было четвергом, значит первая неделя 2026 года началась 29 декабря 2025 года, а в 2026-м получилось 53 недели. Поэтому 1 января 2027 года и записано как 2026-W53-5.

Что такое нулевой день недели?

Это день недели с номером 0, и он есть не во всех системах. В ISO 8601 неделя начинается с понедельника, дни пронумерованы от 1 до 7, нулевого дня там нет. В Unix-конвенции и в Python параметр %w отдаёт воскресенье как 0, а понедельник как 1, то есть неделя идёт с воскресенья. Excel без дополнительных аргументов ведёт себя так же: воскресенье это 1, понедельник 2. Когда в чужом API попадается поле day_of_week с нулями, сначала уточните систему нумерации.

Как узнать день недели для даты в прошлом?

Тем же калькулятором, только в поле вводится прошедшая дата: результат ничем не отличается, алгоритм один и тот же. Можно и вручную: возьмите любую известную опорную дату, например 1 января 2000 года, это суббота, и отсчитайте от неё нужное число дней. Полезный приём: между 1 января 2000 года и 3 ноября 2026 года прошло ровно 9803 дня, а 9803 mod 7 = 3, и суббота плюс три дня это вторник, как и должно быть.

Самый надёжный способ не ошибиться: возьмите любую опорную дату, посчитайте до неё число дней и возьмите остаток от 7. 1 января 2026 года было четвергом, до 3 ноября прошло 306 дней, а 306 mod 7 = 5, и четверг плюс пять дней это вторник. Сходится.

Читайте также