Я пытаюсь написать логику для преобразования секунд в следующие форматы:
(а не только HH: MM: SS, поэтому этот вопрос отличается от других в Stackoverflow)
У меня есть следующая логика для получения формата HH: MM: SS в настоящее время:
getTime(seconds) {
let h = Math.floor(seconds / 3600);
seconds = seconds % 3600;
let min = Math.floor(seconds / 60);
seconds = Math.floor(seconds % 60);
if (seconds.toString().length < 2) seconds = "0" + seconds;
if (min.toString().length < 2) min = "0" + min;
return (h + ":" + min + ":" + seconds);
}
но как я могу получить миллисекунды или фреймы?
Если seconds
- это поплавок, вы можете взять Math.round((seconds - Math.floor(seconds)) * 1000)
чтобы получить оставшиеся миллисекунды. Или Math.round((seconds - Math.floor(seconds)) * fps)
где fps
- количество кадров в секунду.
Если ваша функция занимает всего несколько секунд, тогда нет никакой возможности получить миллисекунды из этой информации...
Вы можете предположить, что это нуль миллисекунды.
Если вы хотите быть точным до миллисекунд, ваша функция должна принимать миллисекунды.
var getStringFromMS=(ms,res=[])=>(
[1000,60,60,24].reduce((rest,curr,i)=>(
res[3-i]=rest%curr,Math.floor(rest/curr)
),ms),res.join(":")
);
Просто перебирайте разные периоды и уменьшайте миллисекунды до нескольких дней, при этом результат сохраняется в res, который можно просто присоединить. Вы можете заменить 1000 кадрами