Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как найти разницу между датами

Короткий ответ

При вычитании дат получается разница в миллисекундах. Её делят на число миллисекунд в сутках:

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 — Округляет число до ближайшего целого.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.