Четыре ответа на один вопрос
У вопроса «сколько между этими датами» больше одного верного ответа, и полезный зависит от того, что именно вы считаете:
- Всего дней — для процентов, возраста и истёкшего времени.
- Рабочие дни — для сроков, уведомлений и оценок доставки.
- Полные недели — для спринтов и графиков дежурств.
- Календарная разница — годы, месяцы и дни, как это произносит человек.
Почему дни ÷ 30 — это не месяцы
Усреднение длины месяцев даёт ответ, который никогда не точен для конкретной пары дат. С 31 января по 28 февраля — 28 дней и ни одного полного календарного месяца; с 1 марта по 1 апреля — 31 день и ровно один месяц. Календарный расчёт здесь «занимает» из предыдущего месяца так же, как вы сделали бы на бумаге, поэтому «месяц и два дня» означает именно то, что вы ожидаете.
Ошибка с часовыми поясами, которой здесь нет
Если вычесть две локальные метки времени, подсчёт дней сломается всякий раз, когда между ними случился перевод часов: один из суток окажется длиной 23 или 25 часов, и деление округлится не туда. Подсчёт по полуночи UTC снимает проблему целиком — поэтому осенний диапазон здесь не возвращается на день короче.
Вопросы
Обе даты входят в подсчёт?+
Общее число дней — это промежуток между датами, поэтому с 1 по 2 января получается один день. Рабочие дни считаются включительно с обеих границ, если те попадают на будни: именно так обычно считают сроки уведомления и окна доставки. Сверьтесь с формулировкой в договоре — конвенции расходятся на день.
Почему календарная разница — это не дни ÷ 30?+
Месяцы разной длины, поэтому любое усреднение неверно для конкретной пары дат. Календарный расчёт считает реальные месяцы: с 31 января по 1 марта — это месяц и один день в календарном смысле и 29 дней в сумме. Оба ответа верны и отвечают на разные вопросы.
Учитываются ли високосные годы и переход на летнее время?+
Да. Дни считаются по полуночи UTC, поэтому перевод часов между датами не может добавить или потерять день — реальная ошибка наивных реализаций, вычитающих две локальные метки времени. Високосные дни учитываются как обычные календарные.
Исключаются ли праздники из рабочих дней?+
Нет. Праздники зависят от страны и меняются каждый год, поэтому считаются только пн–пт. Если нужны настоящие рабочие дни, вычтите из результата свои праздничные.