Калькулятор длительности/ годы · месяцы · дни · часы · минуты

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

Начало
Конец
Длительность от Начала до Конца
1
г.
Годы
0
мес.
Месяцы
0
д.
Дни
0
ч.
Часы
0
мин.
Минуты
0
с.
Секунды
365
Всего дней
52
Всего недель
8,760
Всего часов
525,600
Всего минут

Этот инструмент решил вашу проблему?

Примеры кода

JavaScript (date-fns)
import {
  differenceInYears, differenceInMonths,
  differenceInDays, differenceInHours,
  formatDistanceToNow, intervalToDuration,
  format
} from 'date-fns';

const start = new Date('2020-01-15');
const end = new Date('2024-06-30');

differenceInYears(end, start)   // 4
differenceInDays(end, start)    // 1628
differenceInHours(end, start)   // 39072

// Human-readable breakdown
intervalToDuration({ start, end })
// { years:4, months:5, days:15, hours:0, ... }

// Relative time
formatDistanceToNow(start, { addSuffix: true })
// "about 4 years ago"
Python
from datetime import datetime, date
from dateutil.relativedelta import relativedelta

start = datetime(2020, 1, 15)
end = datetime(2024, 6, 30)

# Total difference
diff = end - start
diff.days          # 1628
diff.total_seconds() / 3600  # 39072.0

# Calendar-aware breakdown (pip install python-dateutil)
delta = relativedelta(end, start)
delta.years    # 4
delta.months   # 5
delta.days     # 15

# Age calculation
birthday = date(1990, 5, 20)
today = date.today()
age = relativedelta(today, birthday).years
Go
import (
  "fmt"
  "time"
)

start := time.Date(2020, 1, 15, 0, 0, 0, 0, time.UTC)
end := time.Date(2024, 6, 30, 0, 0, 0, 0, time.UTC)

duration := end.Sub(start)
fmt.Println(duration.Hours() / 24)  // 1628 days
fmt.Println(duration.Hours())       // 39072 hours

// Calendar diff (years/months) — manual calculation
years := end.Year() - start.Year()
months := int(end.Month()) - int(start.Month())
if months < 0 {
    years--
    months += 12
}
fmt.Printf("%d years, %d months\n", years, months)
SQL
-- MySQL / MariaDB
SELECT
  DATEDIFF('2024-06-30', '2020-01-15') AS days,
  TIMESTAMPDIFF(YEAR,  '2020-01-15', '2024-06-30') AS years,
  TIMESTAMPDIFF(MONTH, '2020-01-15', '2024-06-30') AS months,
  TIMESTAMPDIFF(HOUR,  '2020-01-15', '2024-06-30') AS hours;

-- PostgreSQL
SELECT
  '2024-06-30'::date - '2020-01-15'::date AS days,
  AGE('2024-06-30', '2020-01-15') AS human_readable;
  -- 4 years 5 mons 15 days

-- SQLite
SELECT julianday('2024-06-30') - julianday('2020-01-15');
-- 1628.0

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

Почему нельзя просто разделить миллисекунды?
Деление миллисекунд даёт точную общую длительность, но не интуитивную разбивку 'X лет, Y месяцев, Z дней'. Длины месяцев различаются (28–31 день) и существуют високосные годы. Этот инструмент использует календарный алгоритм.
Как рассчитать возраст или стаж работы?
Введите дату рождения или начала как 'Начало' и текущую дату как 'Конец' — результат покажет точные годы с оставшимися месяцами и днями.
Сколько рабочих дней между двумя датами?
Расчёт рабочих дней сложнее: нужно исключить выходные и, опционально, праздники. Для продакшена используйте библиотеку date-fns differenceInBusinessDays.
Влияют ли високосные секунды на расчёт?
Нет, для обычных расчётов дат. Объект Date JavaScript и большинство ОС не учитывают високосные секунды. Важны только для высокоточной синхронизации.
Как показать относительное время ('3 дня назад') в JavaScript?
Используйте API Intl.RelativeTimeFormat (нативно в современных браузерах): const rtf = new Intl.RelativeTimeFormat('ru', { numeric: 'auto' }); rtf.format(-3, 'day'). Или date-fns formatDistanceToNow().
Как рассчитать разницу часовых поясов?
Объект Date JavaScript хранит UTC-метки времени внутренне; информация о часовом поясе применяется только при отображении. Вычитание значений getTime() даёт правильную разницу независимо от часового пояса.