Javascript 将时间(秒)转换为HH:MM:SS:FF

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

我在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 > 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(':');
}