Преобразование ТИКов в формат времени (чч: мм: СС)

Я получаю значение длины видео как тики с веб-сервера. Я хочу отобразить его в формате" 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

http://www.w3schools.com/jsref/jsref_toisostring.asp

изменить: enter image description here


вам понадобится следующий код:

//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);