将刻度转换为时间格式(hh:mm:ss)

Nul*_*ter 8 html javascript time

我从Web服务器获取视频长度值作为滴答.我想以"hh:mm:ss"格式显示它.我怎样才能在JavaScript中执行此操作?

nbr*_*oks 10

假设刻度以秒为单位(如果不是则可以将它们转换为秒),您可以通过查找时间跨度中的整个分钟和小时数来获得所需的格式,然后获取剩余的秒数.该运营商在这里很有用,因为是事实,一个小时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;
}
Run Code Online (Sandbox Code Playgroud)

请参阅此答案,了解如何在JS中使用前导零填充数字(上述方法源自此答案).

  • 看起来此脚本假设滴答声以秒为单位。 (2认同)

Gon*_*ing 5

这是一个老问题,但是我对任何答案都不满意。

这里有3个问题:

  • 将刻度大小转换为秒
  • 从以秒为单位的持续时间中提取小时,分钟和秒
  • 将数字格式化为2位数字

第1部分-壁虱

媒体的滴答声大小会持续很长时间,因此需要做出一些假设才能回答这个问题。

由于所需的答案是以秒,分钟和小时为单位,因此第一步是将“刻度”值转换为秒。

 seconds = ticks / tickspersecond
Run Code Online (Sandbox Code Playgroud)

例如,如果刻度数以毫秒为单位,则转换为

 seconds = ticks / 1000
Run Code Online (Sandbox Code Playgroud)

第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);
}
Run Code Online (Sandbox Code Playgroud)

注意:由于浮点错误,您需要将Math.floor应用于小时和分钟值。如果要缩短主代码,可以放入Math.floorpad2函数。

最终答案变为:

// 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)
Run Code Online (Sandbox Code Playgroud)

注意:为了演示起见,我在小时显示中添加了% 24modulus hoursperday),因为1971年以来的小时是一个“大”数字-因此不会格式化为小数点后两位:)

JSfiddle演示: https ://jsfiddle.net/TrueBlueAussie/x2s77gzu/

或者,如果你想放Math.floorpad2 https://jsfiddle.net/TrueBlueAussie/x2s77gzu/1/