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);
ご協力いただきありがとうございます!
何時間もサポートを追加できれば、ありがたいです。
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);
_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()
を使用します。
探しているならここに私の貢献があります
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;
}
}
おそらくこれを行うためのより良い方法がありますが、それは仕事を終わらせます:
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未満の場合、先頭にゼロを付けて表示します。
ただし、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 で紹介されました。