95

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

"duration": 298999

ここで見つけた多くの機能を試しましたが、役に立ちませんでした。その数値を次のようなものに変換するものを探しています。

4:59

これは、近づいたが機能しないものです。秒は 60 で止まりません。99 まで進みますが、意味がありません。たとえば、ミリ秒の値として「187810」を入力してみてください。

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

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

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

何時間もサポートを追加していただければ幸いです。

4

12 に答える 12

225
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"

User HelpingHandがコメントで指摘したように、return ステートメントは次のようになります。

return (
  seconds == 60 ?
  (minutes+1) + ":00" :
  minutes + ":" + (seconds < 10 ? "0" : "") + seconds
);
于 2014-01-22T21:43:17.647 に答える
19

時間、0 でパディングされた分と秒の場合:

var ms = 298999;
var d = new Date(1000*Math.round(ms/1000)); // round to nearest second
function pad(i) { return ('0'+i).slice(-2); }
var str = d.getUTCHours() + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds());
console.log(str); // 0:04:59

于 2014-01-22T21:33:39.590 に答える
8

なぜこれらの答えがすべてとても複雑なのか、私にはよくわかりません。このDateクラスは、必要なものを提供します。

const date = new Date(298999);

alert(`${date.getMinutes()}:${date.getSeconds()}`);

上記は op の要件を満たしていますが、タイムゾーンの独立性に関する @ianstarz のコメントに応じて、この更新されたバージョンを追加します。

const d = new Date(Date.UTC(0,0,0,0,0,0,298999)),
  // Pull out parts of interest
  parts = [
    d.getUTCHours(),
    d.getUTCMinutes(),
    d.getUTCSeconds()
  ],
  // Zero-pad
  formatted = parts.map(s => String(s).padStart(2,'0')).join(':');

alert(formatted);

于 2021-09-10T03:08:11.737 に答える
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);

分行に << 演算子がある理由がわかりません。表示する前に分を床に置く必要はないと思います。

分の残りを % で取得すると、その分に経過した秒数のパーセンテージが得られるため、60 を掛けると秒数が得られ、フローリングにより表示に適したものになりますが、欲しいです。

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

于 2014-01-22T21:43:37.143 に答える
-1

ただ動作します:

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

const second = Math.floor((ms % (1000 * 60)) / 1000);
于 2020-03-30T20:41:48.320 に答える
-1

私の解決策: 入力: 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}`
}
于 2020-12-16T11:28:26.850 に答える