使用Javascript将毫秒转换为分钟和秒

时间:2014-01-22 21:26:52

标签: javascript milliseconds seconds

Soundcloud的API以毫秒为单位给出其轨迹的持续时间。 JSON看起来像这样:

"duration": 298999

我尝试过很多我在这里找到的功能无济于事。我只是在寻找能够将这个数字转换成如下所示的东西:

4:59

这是一个接近但不起作用的。它并没有停止在60秒。它一直到99没有任何意义。例如,尝试输入“187810”作为ms的值。

var ms = 298999,
min = Math.floor((ms/1000/60) << 0),
sec = Math.floor((ms/1000) % 60);

console.log(min + ':' + sec);

感谢您的帮助!

如果你能在几小时内补充支持,我将不胜感激。

12 个答案:

答案 0 :(得分:102)

function millisToMinutesAndSeconds(millis) {
  var minutes = Math.floor(millis / 60000);
  var seconds = ((millis % 60000) / 1000).toFixed(0);
  return minutes + ":" + (seconds < 10 ? '0' : '') + seconds;
}

millisToMinutesAndSeconds(298999); // "4:59"
millisToMinutesAndSeconds(60999);  // "1:01"

正如用户HelpingHand在注释中指出的那样,return语句应为

  

返回(秒= = 60?(分钟+ 1)+“:00”:分钟+“:”+(秒&lt; 10?“0”:“”)+秒);

答案 1 :(得分:11)

var ms = 298999;
ms = 1000*Math.round(ms/1000); // round to nearest second
var d = new Date(ms);
console.log( d.getUTCMinutes() + ':' + d.getUTCSeconds() ); // "4:59"

此外,如果您想要营业时间,请使用d.getUTCHours()

答案 2 :(得分:1)

可能有更好的方法可以做到这一点,但它完成了工作:

var ms = 298999;
var min = ms / 1000 / 60;
var r = min % 1;
var sec = Math.floor(r * 60);
if (sec < 10) {
    sec = '0'+sec;
}
min = Math.floor(min);
console.log(min+':'+sec);

不确定为什么你有&lt;&lt;在您的分钟线中,操作员,我不认为在显示之前只需要几分钟。

使用%获得剩余的分钟数,可以得到该分钟内经过的秒数百分比,因此将它乘以60会得到秒数和地板数,使其更适合显示,尽管您也可以得到亚秒如果你想要精确度。

如果秒数小于10,则需要显示前导零。

答案 3 :(得分:1)

事件虽然oment.js没有提供这样的功能,如果你来到这里并且你已经在使用moment.js,试试这个:

function formatDuration(ms) {
  var duration = moment.duration(ms);
  return Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss");
}

你会得到类似x:xx:xx的东西。

如果您希望跳过小时,则持续时间仅为&lt; 60分钟。

function formatDuration(ms) {
  var duration = moment.duration(ms);
  if (duration.asHours() > 1) {
    return Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss");
  } else {
    return moment.utc(duration.asMilliseconds()).format("mm:ss");
  }
}

此时的解决方法已在此Issue中引入。

答案 4 :(得分:1)

这是最好的!

function msToTime(duration) {
var milliseconds = parseInt((duration%1000))
    , seconds = parseInt((duration/1000)%60)
    , minutes = parseInt((duration/(1000*60))%60)
    , hours = parseInt((duration/(1000*60*60))%24);

hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? "0" + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;

return hours + ":" + minutes + ":" + seconds + "." + milliseconds;
}

它将返回00:04:21.223 您可以根据需要设置此字符串的格式。

答案 5 :(得分:1)

function msToHMS( ms ) {
  // 1- Convert to seconds:
  var seconds = ms / 1000;

  // 2- Extract hours:
  var hours = parseInt( seconds / 3600 ); // 3,600 seconds in 1 hour
  seconds = seconds % 3600; // seconds remaining after extracting hours

  // 3- Extract minutes:
  var minutes = parseInt( seconds / 60 ); // 60 seconds in 1 minute

  // 4- Keep only seconds not extracted to minutes:
  seconds = seconds % 60;

  //alert( hours+":"+minutes+":"+seconds);
  hours = (hours < 10) ? "0" + hours : hours;
  minutes = (minutes < 10) ? "0" + minutes : minutes;
  seconds = (seconds < 10) ? "0" + seconds : seconds;
  var hms = hours+":"+minutes+":"+seconds;
  return hms;
}

答案 6 :(得分:0)

如果要寻找,这是我的贡献

  

h:mm:ss

而不是像我以前那样:

function msConversion(millis) {
  let sec = Math.floor(millis / 1000);
  let hrs = Math.floor(sec / 3600);
  sec -= hrs * 3600;
  let min = Math.floor(sec / 60);
  sec -= min * 60;

  sec = '' + sec;
  sec = ('00' + sec).substring(sec.length);

  if (hrs > 0) {
    min = '' + min;
    min = ('00' + min).substring(min.length);
    return hrs + ":" + min + ":" + sec;
  }
  else {
    return min + ":" + sec;
  }
}

答案 7 :(得分:0)

可以正常工作:

const minute = Math.floor(( milliseconds % (1000 * 60 * 60)) / (1000 * 60));

const second = Math.floor((ms % (1000 * 60)) / 1000);

答案 8 :(得分:0)

const Minutes = ((123456/60000).toFixed(2)).replace('.',':');

//Result = 2:06

我们将毫秒数(123456)除以60000,以分钟为单位给出相同的数字,此处为2.0576。

toFixed(2)-将数字四舍五入到最接近的两位小数,在此示例中给出的答案为2.06。

然后使用replace将句号换成冒号。

答案 9 :(得分:0)

我的解决方案: 输入:11381(以毫秒为单位) 输出:00:00:11.381

 timeformatter(time) {
    console.log(time);

    let miliSec = String(time%1000);
    time = (time - miliSec)/1000;
    let seconds = String(time%60);
    time = (time - seconds)/60;
    let minutes = String(time%60);
    time = (time-minutes)/60;
    let hours = String(time)

    while(miliSec.length != 3 && miliSec.length<3 && miliSec.length >=0) {
        miliSec = '0'+miliSec;
    }
    while(seconds.length != 2 && seconds.length<3 && seconds.length >=0) {
        seconds = '0'+seconds;
    }
    while(minutes.length != 2 && minutes.length<3 && minutes.length >=0) {
        minutes = '0'+minutes;
    }
    while(hours.length != 2 && hours.length<3 && hours.length >=0) {
        hours = '0'+hours;
    }
    return `${hours}  : ${minutes} : ${seconds}.${miliSec}`
}

答案 10 :(得分:0)

要将任何以毫秒为单位的数字转换为秒,只需将其乘以 1000 即可解决。

或者你可以创建函数来做到这一点,我认为这是正确的方法。

//convert milliseconds to seconds
function msToSeconds(number) {
    return number = number * 1000;
}

记住 单一职责所以不要像这样msToSMHD

答案 11 :(得分:-2)

如果你想显示小时数,这个代码会做得更好,而在秒之后显示几厘秒或几毫秒,如1:02:32.21 如果在手机中使用,即使屏幕锁定,计时器也会显示正确的时间。

<div id="timer" style="font-family:monospace;">00:00<small>.00</small></div>

<script>
var d = new Date();
var n = d.getTime();
var startTime = n;

var tm=0;
function updateTimer(){
  d = new Date();
  n = d.getTime();
  var currentTime = n;  
  tm = (currentTime-startTime);
  
  //tm +=1; 
  // si el timer cuenta en centesimas de segundo
  //tm = tm*10;
  
  var hours = Math.floor(tm / 1000 / 60 / 60);
  var minutes = Math.floor(tm / 60000) % 60;
  var seconds =  ((tm / 1000) % 60);
  // saca los decimales ej 2 d{0,2}
  var seconds = seconds.toString().match(/^-?\d+(?:\.\d{0,-1})?/)[0];
  var miliseconds = ("00" + tm).slice(-3);
  var centiseconds;

  
  // si el timer cuenta en centesimas de segundo
  //tm = tm/10;


  centiseconds = miliseconds/10;
  centiseconds = (centiseconds).toString().match(/^-?\d+(?:\.\d{0,-1})?/)[0];

  minutes = (minutes < 10 ? '0' : '') + minutes;
  seconds = (seconds < 10 ? '0' : '') + seconds;
  centiseconds = (centiseconds < 10 ? '0' : '') + centiseconds;
  hours = hours + (hours > 0 ? ':' : '');
  if (hours==0){
    hours='';
  }

  document.getElementById("timer").innerHTML = hours + minutes + ':' + seconds + '<small>.' + centiseconds + '</small>';
}

var timerInterval = setInterval(updateTimer, 10);
// clearInterval(timerInterval);
</script>