我从网络服务器获取视频长度值作为滴答声。我想以“hh:mm:ss”格式显示它。如何在 JavaScript 中做到这一点?
4 回答
假设刻度以秒为单位(如果不是,您可以先将它们转换为秒),您可以通过查找时间跨度中的整分钟和小时数来获得所需的格式,然后计算剩余的秒数。模运算符在这里很有用,因为一小时是 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 部分 - 蜱虫
媒体的刻度大小有很多持续时间,因此需要做出一些假设才能回答这个问题。
由于所需的答案是以秒、分钟和小时为单位的,因此第一步是将“滴答”值转换为秒。
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 应用于小时和分钟值。如果要缩短主代码,可以放入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 格式(自 1970 年 1 月 1 日午夜以来的毫秒数):
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);