Как найти разницу между датами
Короткий ответ
При вычитании дат получается разница в миллисекундах. Её делят на число миллисекунд в сутках:
const start = new Date(2025, 0, 1);
const end = new Date(2025, 2, 15);
const msPerDay = 24 * 60 * 60 * 1000;
console.log(Math.round((end - start) / msPerDay));Результат:
73Прибавить дни к дате
setDate() сам переходит в следующий месяц, если дней оказалось больше, чем в текущем:
const date = new Date(2025, 0, 30);
date.setDate(date.getDate() + 5);
console.log(date.toLocaleDateString('ru-RU'));Результат:
04.02.2025Часы и минуты
Разделите разницу на число миллисекунд в часе или минуте:
const start = new Date(2025, 0, 1, 9, 15);
const end = new Date(2025, 0, 1, 17, 45);
const minutes = (end - start) / 60000;
console.log(Math.floor(minutes / 60) + ' h ' + (minutes % 60) + ' min');Результат:
8 h 30 minЧастая ошибка
Из-за перехода на летнее время сутки могут длиться 23 или 25 часов. Округляйте число дней через Math.round(), иначе вместо 73 может получиться 72.96. Сравнение дат в UTC полностью избавляет от проблемы:
const start = Date.UTC(2025, 2, 1);
const end = Date.UTC(2025, 3, 1);
console.log((end - start) / 86400000);Результат:
31Функции из этого ответа
- Date.prototype.getTime — Возвращает дату как число миллисекунд.
- Math.round — Округляет число до ближайшего целого.