ToolDeck

Date Calculator

Вычисление разницы между двумя датами в годах, месяцах, днях и других единицах

Что такое вычисление дат?

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

Сложность вычисления дат обусловлена неравномерной структурой григорианского календаря. Месяцы содержат 28, 29, 30 или 31 день. Год состоит из 365 или 366 дней в зависимости от правил високосного года. Простое вычитание номеров дней даёт неверный результат, когда даты находятся в разных месяцах или годах. Корректные алгоритмы разницы дат должны учитывать эти особенности, перебирая каждую календарную единицу по отдельности.

Арифметика дат встречается во многих задачах: вычисление срока действия токенов, планирование повторяющихся событий, расчёт дедлайнов SLA или измерение времени между записями в логах. В DevOps-процессах это окна действия сертификатов, продолжительность заморозки деплоев и длительность ротаций дежурств. Хотя большинство языков предоставляют библиотеки для работы с датами, браузерный калькулятор даёт мгновенный ответ без написания кода, установки зависимостей или запуска REPL.

Зачем использовать этот калькулятор дат?

Получайте мгновенную разбивку времени между любыми двумя датами сразу в нескольких единицах. Без формул, без кода, без регистрации.

Мгновенный результат
Выберите две даты и увидите разницу в годах, месяцах, неделях, днях, часах и минутах. Результат обновляется при изменении любой из дат.
🔒
Конфиденциальность прежде всего
Все вычисления выполняются в вашем браузере. Даты не передаются ни на какой сервер и нигде не сохраняются.
📅
Несколько единиц вывода
Результат отображается во всех единицах одновременно: итого дней, недели, месяцы и полная разбивка по годам, месяцам и дням. Не нужно конвертировать единицы вручную.
🔢
Без регистрации
Инструмент доступен сразу. Никакого входа, никакой подписки и никакого лимита на использование. Добавьте в закладки и пользуйтесь всякий раз, когда нужна быстрая проверка дат.

Сценарии использования калькулятора дат

Фронтенд-разработка
Проверяйте, сколько дней осталось до даты релиза функции, верифицируйте логику таймера обратного отсчёта или тестируйте компоненты выбора дат на соответствие ожидаемым интервалам.
Бэкенд-разработка
Проверяйте окна истечения токенов, рассчитывайте длительность TTL для кеша или убеждайтесь, что интервалы задач по расписанию дают правильные даты следующего запуска.
DevOps & SRE
Измеряйте промежуток между временными метками инцидентов в постмортемах, рассчитывайте время до истечения сертификатов или определяйте продолжительность заморозки деплоев в праздничный период.
QA и тестирование
Генерируйте тестовые данные с заданными смещениями дат, проверяйте логику ограничений по возрасту, вычисляя точный возраст из дат рождения, или убеждайтесь в корректной обработке граничных условий дат.
Управление проектами
Рассчитывайте продолжительность спринтов, измеряйте количество рабочих дней между контрольными точками или оценивайте сроки сдачи, подсчитывая календарные дни от начальной даты.
Обучение и студенты
Считайте дни до экзамена, рассчитывайте длительность семестра или проверяйте ответы домашних заданий по арифметике дат на курсах компьютерных наук.

Справка по единицам продолжительности дат

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

ЕдиницаЭквивалентПримечание
1 year365 or 366 daysDepends on leap year
1 month28–31 daysVaries by month
1 week7 daysFixed
1 day24 hoursFixed (ignoring DST transitions)
1 hour3,600 secondsFixed
1 minute60 secondsFixed

Распространённые форматы дат

При программной работе с датами формат определяет, как парсится строка даты. Использование неверного формата приводит к незаметным ошибкам. ISO 8601 — самый безопасный выбор для обмена данными: он однозначен и учитывает часовой пояс. В таблице ниже перечислены форматы, с которыми вы, скорее всего, столкнётесь:

ФорматПримерИспользуется в
ISO 86012026-04-10T14:30:00ZAPIs, databases, logs
RFC 2822Fri, 10 Apr 2026 14:30:00 +0000Email headers, HTTP
Unix timestamp1775831400Epoch-based systems
US format04/10/2026User-facing (US locale)
European format10.04.2026User-facing (EU locale)
Short ISO2026-04-10HTML date inputs, SQL DATE

Примеры кода: вычисление дней между датами

Рабочие примеры вычисления разницы между двумя датами на JavaScript, Python, Go и в командной строке. Каждый фрагмент демонстрирует как подсчёт итогового числа дней, так и разбивку по календарным единицам там, где это поддерживается языком.

JavaScript
// Calculate days between two dates
const start = new Date('2026-01-15')
const end = new Date('2026-04-10')
const diffMs = end.getTime() - start.getTime()
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24))
console.log(diffDays) // → 85

// Get year, month, day breakdown
function dateDiff(a, b) {
  let years = b.getFullYear() - a.getFullYear()
  let months = b.getMonth() - a.getMonth()
  let days = b.getDate() - a.getDate()
  if (days < 0) {
    months--
    days += new Date(b.getFullYear(), b.getMonth(), 0).getDate()
  }
  if (months < 0) { years--; months += 12 }
  return { years, months, days }
}
console.log(dateDiff(start, end)) // → { years: 0, months: 2, days: 26 }
Python
from datetime import date, timedelta
from dateutil.relativedelta import relativedelta

start = date(2026, 1, 15)
end = date(2026, 4, 10)

# Total days
diff = (end - start).days
print(diff)  # → 85

# Year/month/day breakdown (requires python-dateutil)
rd = relativedelta(end, start)
print(f"{rd.years}y {rd.months}m {rd.days}d")  # → 0y 2m 26d

# Add 90 days to a date
future = start + timedelta(days=90)
print(future)  # → 2026-04-15
Go
package main

import (
	"fmt"
	"time"
)

func main() {
	start := time.Date(2026, 1, 15, 0, 0, 0, 0, time.UTC)
	end := time.Date(2026, 4, 10, 0, 0, 0, 0, time.UTC)

	// Total duration
	diff := end.Sub(start)
	days := int(diff.Hours() / 24)
	fmt.Println(days) // → 85

	// Add 90 days
	future := start.AddDate(0, 0, 90)
	fmt.Println(future.Format("2006-01-02")) // → 2026-04-15
}
CLI (GNU date / macOS)
# Days between two dates (GNU coreutils)
echo $(( ($(date -d "2026-04-10" +%s) - $(date -d "2026-01-15" +%s)) / 86400 ))
# → 85

# Add 90 days to a date (GNU date)
date -d "2026-01-15 + 90 days" +%Y-%m-%d
# → 2026-04-15

# macOS (BSD date) — add 90 days
date -j -v+90d -f "%Y-%m-%d" "2026-01-15" +%Y-%m-%d
# → 2026-04-15

Часто задаваемые вопросы

Как вычислить количество дней между двумя датами?
Вычтите более раннюю дату из более поздней, чтобы получить разницу в миллисекундах (или в нативном типе продолжительности вашего языка), затем разделите на количество миллисекунд в сутках (86 400 000). Это даст итоговое число прошедших дней. Для разбивки по годам, месяцам и оставшимся дням нужно перебирать каждую единицу по отдельности, поскольку месяцы имеют переменную длину.
Включает ли разница дат начальную или конечную дату?
По соглашению разница дат считает дни между двумя датами, исключая либо начало, либо конец. Если выбрать 1 января и 2 января, результат равен 1 дню. Если ваш сценарий требует включающего подсчёта (оба граничных значения включены), прибавьте 1 к результату. Этот инструмент следует соглашению об исключении конечного значения, принятому в большинстве языков программирования.
Как обрабатываются високосные годы в расчётах дат?
Високосный год добавляет 29 февраля, делая год 366-дневным вместо 365. Правило григорианского високосного года: делится на 4, кроме веков — они должны дополнительно делиться на 400. Так, 2024 и 2028 — високосные годы, 1900 — нет, а 2000 — да. Алгоритмы разницы дат, работающие с календарными единицами (год/месяц/день), обрабатывают это автоматически. Алгоритмы, переводящие в общее число дней, должны учитывать лишний день, если диапазон захватывает 29 февраля.
В чём разница между календарными и рабочими днями?
Календарные дни учитывают все дни, включая выходные и праздники. Рабочие дни исключают субботы, воскресенья и официальные праздники. Этот инструмент рассчитывает календарные дни. Для приблизительного перевода в рабочие дни умножьте общее число календарных дней на 5/7. Для точного подсчёта рабочих дней потребуется также производственный календарь для соответствующей юрисдикции.
Можно ли вычислить будущую дату, прибавив дни к начальной дате?
Да. В JavaScript создайте объект Date и вызовите setDate(getDate() + n). В Python прибавьте timedelta(days=n) к объекту date. В Go используйте time.AddDate(0, 0, n). Этот инструмент сосредоточен на разнице между двумя известными датами, но вы можете использовать его для проверки арифметики: введите начальную дату и ожидаемую результирующую дату и убедитесь, что итоговое число дней совпадает с добавленным смещением.
Почему разные инструменты дают разные результаты для месяцев между датами?
Расчёт месяцев неоднозначен, поскольку месяцы имеют разную длину. Рассмотрим период с 31 января по 28 февраля: это 1 месяц или 0 месяцев и 28 дней? Разные библиотеки принимают разные решения. Наиболее распространённое соглашение (используемое Python's dateutil, Java's Period и этим инструментом) считает полный месяц как достижение того же числа месяца или последнего допустимого дня более короткого месяца. Всегда проверяйте, какое соглашение использует ваша библиотека, при сравнении результатов.
Влияют ли часовые пояса на расчёт дат?
Если выбирать даты без компонента времени (только год-месяц-день), расчёт не зависит от часового пояса, поскольку работает с календарными датами, а не с конкретными моментами времени. Если нужно вычислить разницу между двумя конкретными моментами (включая время и часовой пояс), следует использовать полные временные метки ISO 8601 и перевести оба значения в UTC перед вычитанием. Этот инструмент работает только с календарными датами.