Как вывести длительность в часах, минутах и секундах
Короткий ответ
Делите с остатком: в часе 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:0090000 секунд — это 25 часов, а дата показывает только один час.
Функции из этого ответа
- String.prototype.padStart — Дополняет строку слева до нужной длины.
- Math.floor — Округляет число вниз до целого.