Javascript持续时间显示无效

时间:2018-04-30 15:01:32

标签: javascript date datetime time javascript-events

我正在尝试获取每个mp3声音的持续时间,但有时会显示持续时间,而有时会显示无效

我想以hh:mm:ss格式打印时间。

Div Block我在哪里显示持续时间:

var duration17 = document.getElementById("audio-17").duration;
        duration17 = secondstotime(duration17);
        document.getElementById("duration-17").innerHTML = duration17;

我将秒转换为适当时间的功能:

//convert seconds to the proper time duration
    function secondstotime(secs)
    {
        var t = new Date(1970,0,1);
        t.setSeconds(secs);
        var s = t.toTimeString().substr(0,8);
        if(secs > 86399)
            s = Math.floor((t - Date.parse("1/1/70")) / 3600000) + s.substr(2);
        return s;
    }

2 个答案:

答案 0 :(得分:2)

好了,因为它没有持续时间格式化而比momentjs的预期更快。一个快速的解决方法是:

const duration =  moment.duration(61, 'seconds');
const formatted = moment.utc(duration.asMilliseconds()).format("HH:mm:ss");


> formatted
'00:01:01'

我认为您可以使用基于上述内容的内容替换secondstotime中的代码而不会有太多麻烦。

使用数学自己从数秒开始生成HH:mm:ss格式的持续时间也非常简单 - 请参阅链接问题Convert seconds to HH-MM-SS with JavaScript?以了解其他方法。如果这是你需要对日期和时间做的唯一事情那么一个单行可能比带来像momentjs这样的库更好。

这应该简化事情并消除大多数可能的错误。如果您仍然看到错误,是否可以将输入值记录到secondstotime并分享?

答案 1 :(得分:1)

假设您的持续时间是秒,那么您可以使用以下内容将其简单地转换为hh:mm:ss。使用像moment.js这样的库这么简单的任务是严重的矫枉过正。如果需要支持负值,则需要进行少量更改。



/* @param {number} secs - duration in seconds
** @returns {string} duration in hh:mm:ss format
*/
function secsToTime(secs) {
  return [secs/3600|0, (secs%3600)/60|0, secs%60].map(n=>(n<10?'0':'')+n).join(':');
}

// Sample
[0,23,61,1024,3600,123169].forEach(s=>
  console.log(s + ': ' + secsToTime(s)));
  
&#13;
&#13;
&#13;