Формула расчета дней
Какая формула расчета дней между датами?
Самая короткая формула расчета дней выглядит так:
- календарные дни (исключая начальную дату):
Дни = Дата₂ − Дата₁ - календарные дни (включительно, обе границы считаем днями):
Дни = Дата₂ − Дата₁ + 1
Здесь важно уточнить, что «Дата» – это не строка вида 12.03.2026, а число, которое однозначно соответствует дню в календаре (например, порядковый номер дня или серийное число даты, как в Excel/Google Sheets).
Пример (календарные дни, включительно):
с 10.03.2026 по 12.03.2026: 12 − 10 + 1 = 3 дня (10, 11 и 12 марта).
Как получено число?
- Разница в JDN:
- –
- Применено правило:
- –
- Использована формула:
- –
Калькулятор выше полезен, когда нужно быстро получить разницу в календарных днях или в рабочих днях и заранее выбрать правило: считать ли начальный и/или конечный день. Обычно параметры сводятся к двум датам, режиму (календарные/рабочие) и опциям включения границ; результат возвращается числом дней, а иногда дополнительно – количеством недель и «остатком» дней.
Что именно считается «днями»: три распространённых правила
Ошибки почти всегда начинаются не с математики, а с формулировки задачи. В практике встречаются три разных смысла:
Сколько дней прошло от события A до события B.
Тогда обычно стартовую дату не включают:Дата₂ − Дата₁.Сколько календарных дат попадает в период (например, срок аренды «с… по…»).
Тогда чаще считают включительно:Дата₂ − Дата₁ + 1.Сколько рабочих дней в интервале (график 5/2 или иной, плюс праздники).
Здесь уже недостаточно простой разницы дат – нужен учет дней недели и праздничных исключений.
Если в документе написано «в течение 10 дней», отдельно проверьте, что имеется в виду: календарные или рабочие, и включается ли день наступления события (это уже юридическая интерпретация, а не формула).
Формула расчета дней через порядковый номер дня (универсально)
Когда даты представлены как порядковые номера дней (serial day / day count), разница считается простым вычитанием.
На практике удобный способ получить такой номер – использовать алгоритм Julian Day Number (JDN) для григорианского календаря. Он превращает дату Y-M-D в целое число, а затем разница дней – это разница этих чисел.
JDN для григорианской даты:
Пусть:
Y– год (например, 2026),M– месяц (1–12),D– день месяца (1–31).
Тогда (целочисленные деления – «вниз»):
a = (14 - M) div 12
y = Y + 4800 - a
m = M + 12*a - 3
JDN = D + (153*m + 2) div 5 + 365*y + y div 4 - y div 100 + y div 400 - 32045
После этого:
- дней между датами (исключая начало):
JDN₂ − JDN₁ - дней включительно:
JDN₂ − JDN₁ + 1
Этот подход хорош тем, что одинаково работает:
- внутри одного месяца,
- между годами,
- на високосных годах, и не требует вручную суммировать длины месяцев.
Источник для ориентира по JDN: описание алгоритмов преобразования дат широко приводится в справочниках по календарным вычислениям и, например, в Wikipedia (Julian day).
Как посчитать дни «вручную» без JDN: когда даты в одном году
Если обе даты в одном году, можно считать через «номер дня в году».
- Сначала найдите номер дня в году для каждой даты:
N = D + (сумма дней в месяцах до M) + поправка_на_високосность
Поправка на високосность применяется для дат после февраля:
- если год високосный и месяц
M > 2, добавьте+1, - иначе
+0.
- Затем:
- между датами:
N₂ − N₁ - включительно:
N₂ − N₁ + 1
Длины месяцев (григорианский календарь):
- 31 день: январь, март, май, июль, август, октябрь, декабрь
- 30 дней: апрель, июнь, сентябрь, ноябрь
- февраль: 28 или 29 (в високосный год)
Как проверить високосный год (формула)
Год Y високосный, если выполняется:
Y делится на 400
илиY делится на 4и не делится на 100
Это правило надежно для григорианского календаря (его используют большинство современных гражданских календарей).
Формулы для Excel и Google Sheets (самые практичные)
Если ячейки имеют тип «Дата», Excel/Sheets хранят их как серийное число (дней от базовой даты), поэтому формулы максимально простые.
Календарные дни между двумя датами
- исключая начало:
=B1-A1 - включительно:
=B1-A1+1
Где A1 – дата начала, B1 – дата окончания.
DATEDIF (если нужен «готовый» подсчет дней)
=DATEDIF(A1,B1,"d")
Функция встречается и в Excel, и в Google Sheets. В Excel она исторически «скрытая» (не всегда в подсказках), но работает в большинстве версий.
Рабочие дни (5/2) и праздники
- рабочие дни между датами (обычно включительно):
=NETWORKDAYS(A1,B1,Праздники) - прибавить N рабочих дней к дате:
=WORKDAY(A1,N,Праздники)
В русской локали названия могут быть переведены (например, «ЧИСТРАБДНИ», «РАБДЕНЬ») – зависит от версии и настроек. Праздники обычно передают диапазоном дат, которые нужно исключить дополнительно.
Формула рабочих дней без табличных функций (логика расчёта)
Если нужно именно «формулу/алгоритм», рабочие дни можно посчитать через полные недели и остаток.
Обозначим:
s– дата начала,e– дата окончания,- считаем включительно.
Общее число календарных дней:
T = e − s + 1Полные недели и остаток:
W = T div 7R = T mod 7
База по полным неделям:
Рабочие_в_полных_неделях = 5 * W(для графика 5/2)Остаток
Rдобираем по дням недели:
- пусть
dow(s)– номер дня недели дляs(например, Пн=1 … Вс=7), - тогда для
i = 0..R-1добавляем 1, если день(dow(s)+i)попадает в диапазон Пн–Пт.
В виде суммы индикаторов:
Рабочие = 5*W + Σ I(день_недели ∈ {Пн,Вт,Ср,Чт,Пт})
- Праздники (если есть список дат
H) учитываются так:Рабочие_итог = Рабочие − (количество дат из H, попавших на будний день внутри [s,e])
Такой подход полезен для программирования и проверки результатов «черного ящика», но на практике проще пользоваться готовыми функциями или калькулятором.
Частые ошибки в расчетах дней (и как их избежать)
Смешали «между» и «включительно».
Формулы отличаются всего на +1, но юридически это может быть критично. Сначала фиксируйте правило, потом считайте.
Посчитали по времени, а нужен календарный день.
Например, от 01.03 23:00 до 02.03 01:00 прошло 2 часа, но календарных дат две. Для «календарных дней» обычно важна смена даты, а не 24 часа.
Не учли часовой пояс/летнее время (в IT-задачах).
Если считаете по секундам (timestamp / 86 400), переходы времени могут дать «нецелые сутки». Для календарных дней в приложениях обычно переводят время в локальную дату и считают разницу дат.
Рабочие дни посчитали без праздников.
Выходные – это только часть исключений. Праздничные дни и переносы зависят от региона и года, поэтому список исключаемых дат лучше явно задавать.
Короткое резюме и следующий шаг
- Если даты представлены числом (серийным номером), формула расчета дней – это вычитание:
Дата₂ − Дата₁, а для «включительно» добавьте+1. - Для универсального «чистого» преобразования даты в число подходит алгоритм JDN.
- Для рабочих дней нужна логика по неделям/дням недели и (при необходимости) список праздников.
Если важна точность (включение границ, рабочие дни, праздники), быстрее и надежнее сверить результат через калькулятор разницы дат выше и закрепить правило расчета в вашей задаче/документе.
Часто задаваемые вопросы
Почему иногда получается разное число дней «между датами»?
Обычно причина в разных правилах включения границ: считать ли начальную дату, конечную или обе. Например, от 10.03 до 12.03: «между» (исключая начало) – 2 дня, а «включительно» – 3 дня. Перед расчетом закрепите правило в договоре/ТЗ.
Как понять, високосный год или нет, чтобы правильно считать дни?
Год високосный, если делится на 4, но не делится на 100, либо делится на 400. Например, 2024 – високосный, 2100 – нет, 2000 – да. Это правило григорианского календаря и влияет на февраль (28 или 29 дней).
Как посчитать рабочие дни, если есть праздники и переносы?
Базово исключают субботу и воскресенье, а затем дополнительно вычитают праздники, которые попали на будние дни внутри интервала. Переносы выходных зависят от страны и конкретного года, поэтому список праздничных дат лучше хранить отдельным перечнем и подставлять в расчет.
Как посчитать разницу в днях, если даты с временем (часы и минуты)?
Если есть время, сначала определите правило округления: считать только полные 24 часа, округлять вверх до целых дней или считать календарные смены дат. Технически разница считается по таймстампам (секунды), но на результат влияют часовые пояса и переходы на летнее/зимнее время.
Можно ли в Excel обойтись без DATEDIF и всё равно посчитать дни?
Да. Для календарных дней достаточно вычесть даты: B1-A1 (при формате «Дата»). Для подсчета «включительно» добавляют +1. Для рабочих дней чаще используют NETWORKDAYS/ЧИСТРАБДНИ, а для прибавления рабочих дней – WORKDAY/РАБДЕНЬ.
Как прибавить к дате N дней и получить дедлайн?
Для календарного дедлайна используют дату_дедлайна = дата_старта + N (если дата в виде серийного числа). Если нужно прибавить рабочие дни, применяют правило исключения выходных и праздников; в таблицах это обычно WORKDAY/РАБДЕНЬ с перечнем праздников.