Of course, after the @vp_arth option, it will be another bike, but suddenly it will be easier for someone to understand the mechanics of translating hours into seconds and back (for example, me).
const timeNodes = Array.from(document.querySelectorAll('[data-time]')); let seconds = 0, time; timeNodes.forEach(function(item) { // проделываем операцию с каждым элементом массива time = item.dataset.time.split(':').map(Number); // берём из элемента массива значение data-time и формируем массив, попутно приводя тип к числу if (time[time.length-3]) seconds += time[time.length-3]*3600; // если в атрибуте data-time были часы, то переводим их в секунды и добавляем к переменной seconds seconds += time[time.length-1] + time[time.length-2]*60; // таким же образом переводим минуты в секунды и добавляем секунды к seconds }); var output = function normalizeSeconds(seconds) { var result = []; if (seconds >= 3600 ) { // если секунд достаточно для формирования часов var h = Math.floor(seconds / 3600); // получаем к-во часов делением на 3600 и отсекаем дробную часть result.push(h); // записываем в массив var m = Math.floor( (seconds % 3600) / 60 ); // получаем остаток от часов в секундах, получаем к-во минут, отсекаем дробную часть result.push(m); var s = (seconds % 3600) % 60; result.push(s); } else {// если секунд не достаточно для формирования часов var m = Math.floor(seconds / 60); // получаем минуты, отсекая дробную часть от деления на 60 result.push(m); // получаем секунды, остаток от деления на 60 var s = seconds % 60; result.push(s); } return result.join(':'); // соединяем массив в строку через двоеточие } console.log(output(seconds));
<ul class="videos"> <li data-time="5:43"> Video 1 </li> <li data-time="2:33"> Video 2 </li> <li data-time="3:45"> Video 3 </li> <li data-time="1:00:47"> Video 4 </li> </ul>