Преобразование ТИКов в формат времени (чч: мм: СС)
Я получаю значение длины видео как тики с веб-сервера. Я хочу отобразить его в формате" hh:mm:ss". Как это сделать в JavaScript?
4 ответов
предполагая, что тики находятся в секундах (вы можете сначала преобразовать их в секунды, если это не так), вы можете получить желаемый формат, найдя количество целых минут и часов в промежутке времени, а затем принимая оставшиеся секунды. The дулю здесь полезен оператор, как и тот факт, что час составляет 3600 секунд, а минута-60 секунд:
function displayTime(ticksInSecs) {
var ticks = ticksInSecs;
var hh = Math.floor(ticks / 3600);
var mm = Math.floor((ticks % 3600) / 60);
var ss = ticks % 60;
alert( pad(hh, 2) + ":" + pad(mm, 2) + ":" + pad(ss, 2) );
}
function pad(n, width) {
var n = n + '';
return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;
}
посмотреть ответ для того, как заполнить число с ведущими нулями в JS (метод выше получен из этого ответа).
это старый вопрос, но я не был доволен ни одним из ответов.
здесь есть 3 вопроса:
- преобразование размера тика в секунды
- извлечение часов, минут и секунд из продолжительности в секундах
- форматирование чисел, чтобы иметь 2 цифры
Часть 1 - Клещи
ТИК размеры для СМИ приходите во многих длительностях, поэтому некоторые предположения должны быть сделаны чтобы ответить на вопрос.
поскольку желаемый ответ находится в секундах, минутах и часах, первым шагом является преобразование значения "tick" в секунды.
seconds = ticks / tickspersecond
например, если тики были в миллисекундах, то преобразование будет
seconds = ticks / 1000
часть 2-извлечение часа, минуты и секунды
-
hour = seconds / secondsperhour
=>hour = seconds / 3600
-
minute = seconds / secondsperminute modulus minutesperhour
=>minute = (seconds / 60) % 60)
-
second = seconds modulus secondsperminute
=>second = seconds % 60
часть 3 - форматирование
- существует несколько способов форматирования ведущих нулей на числах, этот будет использовать простую функцию, специфичную для этого примера (максимум 2 цифры).
например
function pad2(number){
number = '0' + number;
return number.substr(number.length - 2);
}
Примечание: из-за ошибок с плавающей запятой вам нужно применить математику.слово часы и минуты. Вы могли бы положить Math.floor
на pad2
функция если вы хотите сократить основное код.
окончательный ответ будет:
// Assume milliseconds for now
var seconds = ticks / 1000;
var hour = Math.floor(seconds / 3600);
var minute = Math.floor((seconds / 60) % 60);
var second = seconds % 60;
var result = pad2(hour) + ':' + pad2(minute) + ':' + pad2(second)
Примечание: ради демо я добавил % 24
(modulus hoursperday
) для отображения часов, поскольку часы с 1971 года являются "большим" числом - поэтому не будет форматировать до 2 десятичных знаков :)
JSfiddle Демо: https://jsfiddle.net/TrueBlueAussie/x2s77gzu/
или если вы хотите поставить Math.floor
на pad2
https://jsfiddle.net/TrueBlueAussie/x2s77gzu/1/
предполагая, что тики находятся в формате javascript (миллисекунды с полуночи 1 января 1970 года):
var date = ticks.toISOString(); // gives e.g. 2015-10-06T16:34:23.062Z
var time = date.substring(11,19); // 16:34:23
вам понадобится следующий код:
//define ticks
var ticks = {...};
//get seconds from ticks
var ts = ticks / 1000;
//conversion based on seconds
var hh = Math.floor( ts / 3600);
var mm = Math.floor( (ts % 3600) / 60);
var ss = (ts % 3600) % 60;
//prepend '0' when needed
hh = hh < 10 ? '0' + hh : hh;
mm = mm < 10 ? '0' + mm : mm;
ss = ss < 10 ? '0' + ss : ss;
//use it
var str = hh + ":" + mm + ":" + ss;
console.log(str);