web-dev-qa-db-ja.com

Javascriptでミリ秒を分と秒に変換する

SoundcloudのAPIは、トラックの継続時間をミリ秒単位で提供します。 JSONは次のようになります。

"duration": 298999

ここで見つけた多くの機能は役に立たなかった。私はその数を次のようなものに変換するものを探しています:

4:59

これが近づいたが、動作しないものです。秒を60で停止することはありません。99までずっと進むので意味がありません。たとえば、msの値として「187810」と入力してみてください。

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

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

ご協力いただきありがとうございます!

何時間もサポートを追加できれば、ありがたいです。

42
ElliotD
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ステートメントは

return(seconds == 60?(minutes + 1)+ ":00":minutes + ":" +(seconds <10? "0": "")+ seconds);

113
maerics
_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()を使用します。

13
Matt

探しているならここに私の貢献があります

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

おそらくこれを行うためのより良い方法がありますが、それは仕事を終わらせます:

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

分行に<<演算子が含まれている理由がわからないので、表示する前に分単位でフロアを設定する必要はないと思います。

%で残りの分を取得すると、その分に経過した秒の割合が得られるので、60を掛けると秒の量が得られ、フローリングにより表示に適していますが、サブ秒の精度を得ることができます欲しいです。

秒が10未満の場合、先頭にゼロを付けて表示します。

1
rgrwkmn

ただし、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のようなものが得られます。

この場合、期間が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 で紹介されました。

1
Robin Wieruch