【问题标题】:Javascript time duration is showing invalid [duplicate]Javascript持续时间显示无效[重复]
【发布时间】:2018-10-10 16:58:17
【问题描述】:

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

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

我正在显示持续时间的 Div 块:

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;
    }

【问题讨论】:

  • 你在这里寻找什么样的输出?如果您想要像61 seconds = 1:01 这样的时间,那么该函数看起来是一种非常复杂且容易出错的方法......
  • 输出应该类似于 hour:min:ss 即 00:10:13
  • 这个问题有答案。如果可以使用,建议moment.js,如果不能,建议使用其中的单线解决方案。不错@AndrewLohr
  • @brabster 不,我也尝试了 momentjs,但仍然抛出此错误。

标签: javascript date datetime time


【解决方案1】:

好的,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 并分享?

【讨论】:

【解决方案2】:

假设您的持续时间是秒,那么您可以使用以下命令将其简单地转换为 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)));
  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多