Калькулятор Разницы Дат
Вычисляет дни, недели, месяцы, годы между двумя датами
Вычислить интервал между двумя датами
Что такое Калькулятор Разницы Дат?
Калькулятор разницы дат измеряет промежуток между двумя календарными датами и показывает его в днях, неделях, приблизительных месяцах, приблизительных годах, а также в часах или минутах. Он полезен для проверки длительности проекта, отпуска, расчетного периода, годовщины, срока хранения данных или простого исторического интервала. Результат — это разница между датами, а не автоматический подсчет с включением обеих крайних дат: с 1 января до 3 января обычно два дня разницы, если правило задачи не требует считать оба дня. Месяцы и годы часто приблизительны, потому что месяцы имеют разную длину. Для рабочих дней, праздников, часовых поясов и юридических сроков нужны отдельные правила.
Как использовать
Как использовать
- Введите начальную дату
- Введите конечную дату
- Нажмите «Calculate interval», чтобы сравнить две даты
- Просмотрите результаты: дни, недели, месяцы, годы, часы, минуты, секунды
Правила подсчёта
- Проверьте, нужен ли эксклюзивный или инклюзивный подсчёт; многие бизнес-правила учитывают обе даты — и начальную, и конечную.
- При работе в разных часовых поясах сначала приведите даты к одному поясу, особенно когда важны часы и минуты.
Применение
Технический принцип
Точная разница в днях вычисляется как Math.floor((end.getTime() - start.getTime()) / 86_400_000), где 86 400 000 — количество миллисекунд в не-DST 24-часовых сутках. Это даёт эксклюзивный интервал — с 1 января по 3 января разница составляет 2 дня, а не 3, — поскольку вычитание измеряет промежуток между двумя моментами, а не считает календарные клетки. Для инклюзивного подсчёта (с обеими граничными датами) к результату нужно прибавить 1; многие юридические правила, правила отпусков и расчётов требуют именно этого, а ошибка со сдвигом на единицу — самая частая причина расхождений между отчётами HR и бухгалтерии. Недели — это просто days / 7; страница также отображает часы = days * 24, минуты = days * 1440 и секунды = days * 86 400 как производные итоги. Разница в месяцах и годах намеренно помечена как «приблизительная», поскольку календарные месяцы и годы различаются по длине. Простой подход — days / 30.436875 (средний григорианский месяц) и days / 365.2425 (средний григорианский год за 400-летний цикл), что подходит для отчётов и дашбордов, но неверно для контрактов. Для календарно точного подсчёта «X полных месяцев между» алгоритм вычитает компоненты year x 12 + month, а затем уменьшает результат на 1, если конечный день месяца раньше начального — именно так вычисляют большинство библиотек дат (date-fns differenceInMonths, dayjs $.diff('month'), Temporal Duration.from). Вычисление лет имеет ту же особенность: с 2024-02-29 по 2025-02-28 иногда считается как 1 год (с ограничением концом месяца), а иногда как 0 лет 11 месяцев 30 дней, в зависимости от конвенции. Високосные годы следуют григорианскому правилу (делятся на 4, за исключением вековых лет, которые не делятся на 400, поэтому 1900 — обычный, 2000 — високосный, 2024 — високосный). Интервал, включающий 29 февраля, автоматически получает лишний день, поскольку подсчёт дней привязан к миллисекундам от эпохи, а не к календарным полям. Обработка часовых поясов критична, когда две граничные точки имеют разрешение менее суток: вычитание двух значений Date, созданных из строк местного времени, может отличаться на величину местного смещения UTC, а интервал, пересекающий переход на летнее/зимее время, может составить 23 или 25 часов вместо номинальных 24. Проблема Y2038 (переполнение знакового 32-битного Unix time_t 2038-01-19T03:14:07Z) не затрагивает эту страницу, поскольку JavaScript Date использует 64-битный float, способный представлять даты примерно до 100 миллионов дней в обе стороны от эпохи, но нисходящие системы, написанные на 32-битном C, всё ещё требуют внимания.
- Точные дни = Math.floor((end - start) / 86_400_000); 86,4 млн мс на не-DST сутки.
- Результат эксклюзивный по умолчанию: с 1 янв по 3 янв = 2 дня; прибавьте 1 для инклюзивного подсчёта (с обеими датами).
- Приблизительный месяц использует среднее 30,436875 дней; год — 365,2425 дней за 400-летний григорианский цикл.
- Календарно точная разница в месяцах: (y2-y1)*12 + (m2-m1), затем -1, если конечный день < начального — совпадает с date-fns differenceInMonths.
- Високосные годы: делятся на 4, но вековые должны делиться на 400 (1900 — нет, 2000 — да, 2024 — да).
- Переходы на летнее/зимее время создают 23-часовые и 25-часовые календарные сутки; вычитание 24 ч может не равняться одному календарному дню.
- JavaScript Date — 64-битный float, не подвержен проблеме Unix Y2038 (переполнение 32-битного time_t 2038-01-19 03:14:07 UTC).
Примеры
Два полных календарных года (2025-01-01 — 2026-12-31)
Начало : 2025-01-01
Конец : 2026-12-31
Дней : 730
Недель : 104.29
Месяцев : ~24.00 (приблизительно)
Лет : ~2.00 (приблизительно)
Примечание : 2028 — следующий високосный год в диапазоне, поэтому при расширении интервал включает 29 февраля 2028.Короткий интервал (3 дня)
Начало : 2026-06-11
Конец : 2026-06-14
Дней : 3
Часов : 72
Минут : 4320
Секунд : 259200
Включительный счёт (с обоими концами): 4 дняДлительность проекта через границу года
Начало : 2026-01-15 (старт)
Конец : 2026-07-20 (запуск)
Дней : 186
Недель : 26.57
Месяцев : ~6.16
Use case : Отчёты о статусе, ретроспектива, сводка по ГантуРасчёт возраста в днях
День рождения : 1995-03-15
Сегодня : 2026-06-11
Дней прожито : 11 411
Лет (прибл.) : 31,24
Месяцев : ~374,9
Полезно, когда нужен точный счёт дней (например, для вех)Нюанс часовых поясов (Токио vs Лос-Анджелес)
Одна и та же календарная дата '2026-07-15' соответствует разным реальным моментам:
Tokyo (UTC+9) -> 2026-07-15 00:00 = 2026-07-14 15:00 UTC
Los Angeles (UTC-7) -> 2026-07-15 00:00 = 2026-07-15 07:00 UTC
Разница при наивном использовании: около 16 часов — достаточно, чтобы изменить результат на 1 день.
Решение: приведите обе даты к одному часовому поясу перед вычитанием.Часто задаваемые вопросы
Как рассчитывается разница между двумя датами?
Календарная арифметика: результат показывается в годах, месяцах и днях, а также в виде суммарных недель, дней, часов, минут и секунд. Годы и месяцы считаются по принципу годовщины (счётчик лет увеличивается, только когда наступает то же число и месяц), а дни — это количество календарных дней между двумя датами.
Почему годы + месяцы + дни не складываются точно в общее число дней?
Потому что в месяце от 28 до 31 дня. «1 год, 2 месяца, 5 дней» — это разное количество дней в зависимости от того, сколько дней в задействованных месяцах: 28, 29, 30 или 31. Поле «всего дней» использует чистую календарную арифметику и является самым точным числом.
Включается ли начальный день?
Страница показывает количество без начальной даты — одинаковые даты дают разницу в 0 дней. Если нужен «инклюзивный» подсчёт (например, для бронирования ночей), прибавьте 1 к результату вручную.
Исключаются ли выходные и праздники?
Нет. Эта страница считает каждый календарный день. Для разницы в рабочих днях (с пропуском выходных и опционально праздников) используйте инструмент «Калькулятор рабочих дней».
Почему время выглядит странно после перехода на летнее время?
Часть с часами и минутами использует абсолютное время, поэтому при пересечении границы перехода на летнее время к полю времени суток добавляется или вычитается час. Сам подсчёт дней не затрагивается, потому что разница в днях считается по календарю.
Какой максимальный диапазон дат можно сравнить?
JavaScript Date охватывает ±100 000 000 дней от эпохи Unix, поэтому работает любая пара исторических или будущих дат в пределах примерно ±271 000 лет. Даты до 1582 года используют пролептическую григорианскую арифметику, которая отличается от местного календаря того времени.
Расчёт выполняется локально?
Да. Обе даты и результат остаются в вашем браузере. Ничего не загружается и не записывается в журнал.