belun.app Блог
EN

Сколько дней между датами: ловушки подсчёта

Почему с понедельника по пятницу — то 4 дня, то 5, как високосные годы и разная длина месяцев путают подсчёт и как считать правильно.

Paper calendar planner on a desk used for counting days between two dates

Сколько дней с понедельника по пятницу? Четыре, если считать промежутки — так работают ночи в отеле. Пять, если считать сами дни — так суд считает срок. Оба ответа верны. Проблемы начинаются, когда два человека представляют себе разные варианты вопроса и выясняют это на ресепшене при выезде или в споре по договору.

У программистов для этого есть название — ошибка на единицу, она же «ошибка заборных столбов»: забор из 10 пролётов держится на 11 столбах. У всех остальных это звучит проще: «Постойте, я думал, дедлайн в пятницу».

Между датами или включая обе?

Практическое правило такое: измеряете расстояние — конечную дату не считайте. Измеряете длительность пребывания — считайте.

  • Отель считает ночи: заехали 10-го, выехали 13-го — платите за три.
  • Прокат машин обычно считает дни: взяли 10-го, вернули 13-го — в счёте нередко четыре.
  • Дедлайны двусмысленны по своей природе, поэтому юристы пишут «не позднее 23:59 30 июня», а не «в течение 30 дней».
  • Возраст считает завершённые интервалы: вам не 40, пока день рождения не наступил, как бы близко он ни был.

Наш калькулятор дней между датами делает выбор явным: флажок переключает между двумя способами, и с понедельника по пятницу вы видите 4 или 5 — и точно знаете, что именно посчитано.

Високосные годы: лишний день без предупреждения

Интервал, в который попало 29 февраля, на день длиннее «такого же» интервала в обычный год. Само правило устроено хитрее, чем кажется: год делится на 4 — високосный, но если делится на 100 — нет, но если заодно и на 400 — всё-таки да. Поэтому 2024-й был високосным, 1900-й — нет, а 2000-й — да. Программисты, пишущие работу с датами вручную, ошибаются здесь так часто, что у этой ошибки есть собственная категория в баг-трекерах.

Обычно об этом не думаешь — пока не считаешь проценты по кредиту на «365 дней», который незаметно длился 366, или не выясняешь, почему два одинаковых с виду диапазона различаются на день.

Месяц — единица, которая не стоит на месте

«Через два месяца» звучит точно, но точности там нет. 15 января плюс два месяца — 15 марта, здесь всё просто. А вот 31 января плюс месяц попадает на дату, которой не существует. Таблицы решили это прижатием к краю: функция ДАТАМЕС (EDATE) в Excel возвращает 28 или 29 февраля, и большинство библиотек дат поступают так же. Наш калькулятор использует то же правило, так что его месяцы совпадут с расчётом в таблице.

Отсюда же ощущение, что «сколько месяцев между датами» и «сколько дней между датами» противоречат друг другу. 30 дней — это то ли полный месяц, то ли нет, смотря куда в календаре эти 30 дней попали. С 1 февраля по 1 марта — месяц за 28 дней; с 1 по 31 июля — 30 дней и ноль полных месяцев.

Будни — это не рабочие дни

Калькулятор отдельно показывает будни (понедельник — пятница) и выходные. Честная оговорка: будни и рабочие дни — не одно и то же. Праздники в каждой стране свои, и никакой калькулятор не знает, какие из них выходные именно у вас. Число будней — это потолок; праздники вычитайте сами.

Хватит считать по пальцам

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

Попробуйте инструмент

Калькулятор дней между датами →