Encodera

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

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

Как вывести длительность в часах, минутах и секундах

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

Делите с остатком: в часе 3600 секунд, в минуте 60. padStart() добавляет ведущий ноль:

const formatDuration = (total) => {
  const hours = Math.floor(total / 3600);
  const minutes = Math.floor((total % 3600) / 60);
  const seconds = total % 60;
  const pad = (n) => String(n).padStart(2, '0');
  return `${hours}:${pad(minutes)}:${pad(seconds)}`;
};
 
console.log(formatDuration(3909));
console.log(formatDuration(59));

Результат:

1:05:09
0:00:59

Словами

Для текстовой формы пропускайте нулевые части:

const humanize = (minutes) => {
  const h = Math.floor(minutes / 60);
  const m = minutes % 60;
  return [h && `${h} h`, m && `${m} min`].filter(Boolean).join(' ') || '0 min';
};
 
console.log(humanize(135));
console.log(humanize(45));
console.log(humanize(120));

Результат:

2 h 15 min
45 min
2 h

Минуты и секунды видео

Для плеера достаточно минут и секунд:

const seconds = 254;
 
console.log(`${Math.floor(seconds / 60)}:${String(seconds % 60).padStart(2, '0')}`);

Результат:

4:14

Частая ошибка

Длительность через объект Date ломается на значениях больше суток и зависит от часового пояса. Деление проще и надёжнее:

const seconds = 90000;
 
console.log(new Date(seconds * 1000).toISOString().slice(11, 19));

Результат:

01:00:00

90000 секунд — это 25 часов, а дата показывает только один час.

Функции из этого ответа

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

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