我想转换时间的持续时间,即秒数,以冒号分隔的时间字符串(hh:mm:ss)

我在这里找到了一些有用的答案,但它们都谈到了转换成x小时和x分钟的格式。

那么有一个小片段,这是在jQuery或只是原始JavaScript?


当前回答

使用moment.js库:

function humanizeDuration(input, units ) { 
  // units is a string with possible values of y, M, w, d, h, m, s, ms
  var duration = moment().startOf('day').add(units, input),
    format = "";

  if(duration.hour() > 0){ format += "H [hours] "; }

  if(duration.minute() > 0){ format += "m [minutes] "; }

  format += " s [seconds]";

  return duration.format(format);
}

这允许您指定任何持续时间,无论是小时、分钟、秒、磨,并返回人类可读的版本。

其他回答

使用moment.js库:

function humanizeDuration(input, units ) { 
  // units is a string with possible values of y, M, w, d, h, m, s, ms
  var duration = moment().startOf('day').add(units, input),
    format = "";

  if(duration.hour() > 0){ format += "H [hours] "; }

  if(duration.minute() > 0){ format += "m [minutes] "; }

  format += " s [seconds]";

  return duration.format(format);
}

这允许您指定任何持续时间,无论是小时、分钟、秒、磨,并返回人类可读的版本。

            //secondsToTime();
            var t = wachttijd_sec; // your seconds
            var hour = Math.floor(t/3600);
            if(hour < 10){
                hour = '0'+hour;
            }
            var time = hour+':'+('0'+Math.floor(t/60)%60).slice(-2)+':'+('0' + t % 60).slice(-2);
            //would output: 00:00:00 > +100:00:00

即使超过24小时也能保持倒计时

以下是@meiyang的优秀解决方案的一个变体,我最终使用了它:

    function duration(seconds) {
        return [
            format(seconds / 60 / 60),
            format(seconds / 60 % 60),
            format(seconds % 60)
        ].join(':');
    }

    format(n) {
        return (~~n).toString().padStart(2, '0')
    }

PS:同样值得注意的是,上面的一些其他解决方案只适用于< 24h的值

我喜欢第一个答案。 这里有一些优化:

源数据是一个数字。不需要额外的计算。 过多的计算

结果代码:

Number.prototype.toHHMMSS = function () {
    var seconds = Math.floor(this),
        hours = Math.floor(seconds / 3600);
    seconds -= hours*3600;
    var minutes = Math.floor(seconds / 60);
    seconds -= minutes*60;

    if (hours   < 10) {hours   = "0"+hours;}
    if (minutes < 10) {minutes = "0"+minutes;}
    if (seconds < 10) {seconds = "0"+seconds;}
    return hours+':'+minutes+':'+seconds;
}

以下是我的解决方案。您可以尝试下面的代码片段。

函数secToHHMM(sec) { var d = new Date(); d.setHours (0); d.setMinutes (0); d.setSeconds (0); d = new Date(d.getTime() + sec*1000); 返回d.toLocaleString (en)。分割(' ')[1]; }; alert('One hour: ' + secToHHMM(60*60));/ /“01:00:00” alert(' 1小时5分钟:' + secToHHMM(60*60 + 5*60));/ /“01:05:00” alert(' 1小时5分23秒:' + secToHHMM(60*60 + 5*60 + 23));/ /“01:05:23”