javascript - obtener - restar horas con moment js
Convertir milisegundos en minutos y segundos con Javascript (5)
Probablemente hay una mejor manera de hacer esto, pero hace el trabajo:
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);
No estoy seguro de por qué tiene el operador << en la línea de minutos, no creo que sea necesario, solo reduzca los minutos antes de que aparezca.
Obtener el resto de los minutos con% le da el porcentaje de segundos transcurridos en ese minuto, por lo que multiplicarlo por 60 le da la cantidad de segundos y el piso lo hace más apto para la visualización, aunque también puede obtener una precisión de un segundo si lo hace. querer.
Si los segundos son menos de 10, querrá mostrarlos con un cero inicial.
La API de Soundcloud da la duración de sus pistas en milisegundos. JSON se ve así:
"duration": 298999
He intentado muchas funciones que encontré aquí en vano. Solo estoy buscando algo para convertir ese número en algo como esto:
4:59
Aquí hay uno que se acercó, pero no funciona. No detiene los segundos a 60. Llega hasta 99, lo que no tiene sentido. Intente ingresar "187810" como un valor de ms, por ejemplo.
var ms = 298999,
min = Math.floor((ms/1000/60) << 0),
sec = Math.floor((ms/1000) % 60);
console.log(min + '':'' + sec);
¡Gracias por tu ayuda!
Si pudieras agregar soporte por horas, también te lo agradecería.
Sin embargo, el evento, oment.js no proporciona dicha funcionalidad, si vienes aquí y ya estás usando moment.js, prueba esto:
function formatDuration(ms) {
var duration = moment.duration(ms);
return Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss");
}
Obtendrá algo como x: xx: xx.
En el caso de que quiera omitir la hora, cuando la duración es de sólo 60 minutos.
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");
}
}
Esta solución en el momento se introdujo en este Issue .
este código hará un mejor trabajo si desea mostrar las horas y los centisegundos o milisegundos después de segundos como 1: 02: 32.21 y si se usa en un teléfono celular, el temporizador mostrará el tiempo correcto incluso después del bloqueo de pantalla.
<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>
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"
Como User HelpingHand
señaló en los comentarios, la declaración de devolución debe ser
retorno (segundos == 60? (minutos + 1) + ": 00": minutos + ":" + (segundos <10? "0": "") + segundos);
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"
También si quieres las horas, usa d.getUTCHours()
.