Javascript 将时间(秒)转换为HH:MM:SS:FF
我在ReactJs项目中使用视频播放器 我以秒为单位获取播放器的当前时间,我想将该时间转换为,其中FF表示特定帧 我已经能够将时间转换为HH:MM:SS格式,如下所示:Javascript 将时间(秒)转换为HH:MM:SS:FF,javascript,time,date-format,datetime-format,time-format,Javascript,Time,Date Format,Datetime Format,Time Format,我在ReactJs项目中使用视频播放器 我以秒为单位获取播放器的当前时间,我想将该时间转换为,其中FF表示特定帧 我已经能够将时间转换为HH:MM:SS格式,如下所示: secondsToHms = (d) => { d = Number(d); var h = Math.floor(d / 3600); var m = Math.floor(d % 3600 / 60); var s = Math.floor(d % 3600 % 60); return ((h &g
secondsToHms = (d) => {
d = Number(d);
var h = Math.floor(d / 3600);
var m = Math.floor(d % 3600 / 60);
var s = Math.floor(d % 3600 % 60);
return ((h > 0 ? h + ":" + (m < 10 ? "00" : "") : "00:") + "0"+ m + ":" + (s < 10 ? "0" : "") + s);
}
假设我有一个以每秒24帧的帧速率播放的视频,并且我得到了我的时间,例如126.234452,我如何改进我的函数以同时计算FF部分?如果你知道fps,计算应该非常简单: 以秒%1获取时间的小数部分。 将其乘以fps:0.0秒为第0帧,0.9999秒为第fps-1帧。 帧计数通常以零为基础,但可以添加1使其以1为基础。 如果您想要总帧,只需跳过步骤1
secondsToHms = ( d, fps = 24 ) => {
const pad2 = txt => ( '0' + Math.floor( txt ) ).substr( -2 ),
h = pad2( d / 3600 ),
m = pad2( d % 3600 / 60 ),
s = pad2( d % 60 ),
f = pad2( d % 1 * fps ); // +1 here for one based frame
return `${h}:${m}:${s}:${f}`;
}
我冒昧地重构了你的函数。我希望它仍然是你的
要计算FF,只需1将总秒数乘以帧速率,2执行以下操作:
这是函数的变体,可正确转换为HH:MM:SS:FF:
var convertTime = function (input, fps) {
var pad = function(input) {return (input < 10) ? "0" + input : input;};
fps = (typeof fps !== 'undefined' ? fps : 24 );
return [
pad(Math.floor(input / 3600)),
pad(Math.floor(input % 3600 / 60)),
pad(Math.floor(input % 60)),
pad(Math.floor(input * fps % fps))
].join(':');
}
演示
var convertTime=功能输入,fps{
var pad=functioninput{返回输入<10?0+input:input;};
fps=fps的类型!=“未定义”?fps:24;
返回[
padMath.floorinput/3600,
padMath.floorinput%3600/60,
padMath.floorinput%60,
padMath.floorinput*fps%fps
]。加入“:”;
}
document.body.innerHTML=;你是在问我们如何将一个数字连接到该字符串吗?或者什么?我在问如何将126.4231434秒转换为hh:mm:ss:ffI以秒格式获得时间输出。我可以找到一个将其转换为hh:mm:ss但不转换为hh:mm:ss:ffs的解决方案,这取决于fps每秒视频帧的大小。它的范围是24到30,可以通过剩余秒计算。我找不到dup,它也不算太板,而且太简单不是关闭它的理由,所以我最终认为这可能值得一个答案。非常感谢。我会尝试一下,如果有任何问题发生,我会告诉你。这个解决方案也是workds@JohnSlegers帧速率不限于60分钟或秒:现在120fps并不少见。但是,如果您希望帧始终至少为两位数,那么这只是方法的简单替换,如更新的答案所示,尽管我认为您应该能够作为一名程序员同事调整自己。谢谢John。它成功了。Sheepy提供的另一个解决方案也是works@ApurvG:我的解决方案始终在末尾提供两位数。Sheepy的解决方案当前版本产生相同的输出,只是当帧介于0和9之间时,它只在末尾提供一个数字@ApurvG:快速比较我的解决方案和Sheepy的解决方案的输出:是。这就是为什么我标记你的答案是正确的。
var convertTime = function (input, fps) {
var pad = function(input) {return (input < 10) ? "0" + input : input;};
fps = (typeof fps !== 'undefined' ? fps : 24 );
return [
pad(Math.floor(input / 3600)),
pad(Math.floor(input % 3600 / 60)),
pad(Math.floor(input % 60)),
pad(Math.floor(input * fps % fps))
].join(':');
}