Javascript segundos a minutos y segundos

Resuelto James Moore asked hace 14 años • 34 respuestas

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?

James Moore avatar Sep 17 '10 13:09 James Moore
Aceptado

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);
Gumbo avatar Sep 17 '2010 06:09 Gumbo

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),
);
Expandir fragmento

~~es una abreviatura de Math.floor, consulte este enlace para obtener más información

Vishal avatar Jul 14 '2012 17:07 Vishal