Conversion de millisecondes en minutes et secondes avec Javascript
L'API de Soundcloud donne la durée de ses pistes en millisecondes. JSON ressemble à ceci:
"duration": 298999
J'ai essayé de nombreuses fonctions que j'ai trouvées ici en vain. Je cherche juste quelque chose pour convertir ce nombre en quelque chose comme ceci:
4:59
En voici un qui s'est rapproché, mais ne fonctionne pas. Ça n'arrête pas les secondes à 60. Cela va jusqu'à 99, ce qui n'a aucun sens. Essayez d'entrer "187810" comme une valeur de ms, par exemple.
var ms = 298999,
min = Math.floor((ms/1000/60) << 0),
sec = Math.floor((ms/1000) % 60);
console.log(min + ':' + sec);
Merci pour votre À l'aide!
Si vous pouviez ajouter à l'appui pendant des heures, aussi, je vous serais reconnaissant.
5 réponses
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"
En tant Qu'utilisateur HelpingHand
pointé dans les commentaires, l'instruction return doit être
Retour (secondes = = 60 ? (mn+1) + ":00" : minutes + ":" + (secondes
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"
Aussi, si vous voulez les heures, utilisez d.getUTCHours()
.
Il y a probablement une meilleure façon de le faire, mais cela fait le travail:
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);
Je ne sais pas pourquoi vous avez l'opérateur
Obtenir le reste des minutes avec % vous donne le pourcentage de secondes écoulées dans cette minute, donc le multiplier par 60 vous donne la quantité de secondes et le revêtement le rend plus adapté à l'affichage bien que vous puissiez également obtenir une précision de sous-seconde si vous vouloir.
Si les secondes sont inférieures à 10, vous voulez les afficher avec un zéro en tête.
Événement cependant, oment.js ne fournit pas de telles fonctionnalités, si vous venez ici et que vous utilisez déjà moment.js, essayez ceci:
function formatDuration(ms) {
var duration = moment.duration(ms);
return Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss");
}
Vous obtiendrez quelque chose comme x:xx:xx.
Dans le cas où vous voudrez peut-être sauter l'heure, lorsque la durée est seulement
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");
}
}
Cette solution de contournement dans moment a été introduite dans ce problème .
CE code fera un meilleur travail si vous voulez montrer des heures, et des centisecondes ou des milisecondes après des secondes comme 1: 02: 32.21 et si elle est utilisée dans un téléphone cellulaire, la minuterie affichera le bon timing même après le verrouillage de l'écran.
<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>