Javascript segundos a minutos y segundos
Este es un problema común pero no estoy seguro de cómo solucionarlo. El siguiente código funciona bien.
var mind = time % (60 * 60);
var minutes = Math.floor(mind / 60);
var secd = mind % 60;
var seconds = Math.ceil(secd);
Sin embargo, cuando llego a 1 hora o 3600 segundos, devuelve 0 minutos y 0 segundos. ¿Cómo puedo evitar esto para que devuelva todos los minutos?
Para obtener el número de minutos completos, divida el número de segundos totales por 60 (60 segundos/minuto):
const minutes = Math.floor(time / 60);
Y para obtener los segundos restantes, multiplica los minutos completos por 60 y resta del total de segundos:
const seconds = time - minutes * 60;
Ahora, si también desea obtener las horas completas, primero divida el número total de segundos por 3600 (60 minutos/hora · 60 segundos/minuto), luego calcule los segundos restantes:
const hours = Math.floor(time / 3600);
time = time - hours * 3600;
Luego calculas los minutos completos y los segundos restantes.
Prima:
Utilice el siguiente código para imprimir la hora (sugerido por Dru):
function str_pad_left(string, pad, length) {
return (new Array(length + 1).join(pad) + string).slice(-length);
}
const finalTime = str_pad_left(minutes, '0', 2) + ':' + str_pad_left(seconds, '0', 2);
Otra solución elegante:
function fancyTimeFormat(duration) {
// Hours, minutes and seconds
const hrs = ~~(duration / 3600);
const mins = ~~((duration % 3600) / 60);
const secs = ~~duration % 60;
// Output like "1:01" or "4:03:59" or "123:03:59"
let ret = "";
if (hrs > 0) {
ret += "" + hrs + ":" + (mins < 10 ? "0" : "");
}
ret += "" + mins + ":" + (secs < 10 ? "0" : "");
ret += "" + secs;
return ret;
}
console.log(
fancyTimeFormat(1),
fancyTimeFormat(10),
fancyTimeFormat(100),
fancyTimeFormat(1000),
fancyTimeFormat(10000),
);
~~
es una abreviatura de Math.floor
, consulte este enlace para obtener más información