Convertir segundos a días, horas, minutos y segundos

3 minutos de lectura

avatar de usuario
danielle rose mabunga

Tengo un evento de tiempo de Javascript con un bucle infinito con un botón de parada.

Mostrará números cuando se haga clic en el botón de inicio. Ahora quiero que estos números se conviertan en algo así como 4 horas, 3 minutos, 50 segundos

var c = 0;
var t;
var timer_is_on = 0;

function timedCount() {
  document.getElementById('txt').value = c;
  c = c + 1;
  t = setTimeout(function() {
    timedCount()
  }, 1000);
}

function doTimer() {
  if (!timer_is_on) {
    timer_is_on = 1;
    timedCount();
  }
}

function stopCount() {
  clearTimeout
  timer_is_on = 0;

}

$(".start").on("click", function() {
  //var start = $.now();
  //alert(start);
  //console.log(start);
  doTimer();
  $(".end").show();
  $(".hide_div").show();
});
$(".end").on("click", function() {
  stopCount();
});
.hide_div {
  display: none;
}

.end {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p class="start">Start</p>
<p class="end">End</p>
<p class="hide_div">
  <input type="text" id="txt" />//display numbers eg 12345
</p>

¿Cómo convertir números como 123456 a 1 día, 4 horas, 40 minutos, 45 segundos?

  • ¿Resolviste este problema?

    – Niklesh Raut

    18/10/2017 a las 17:50

avatar de usuario
heidi maknow

Respuesta corta:

var s = (Math.floor(123456/86400) + ":" + (new Date(123456 * 1000)).toISOString().substr(11, 8)).split(":");
console.log(`${s[0]} days, ${s[1]} hours, ${s[2]} minutes, ${s[3]} seconds` )

Editar:

Permítanme dividirlo en partes:

Math.floor(123456/86400)

86400 es el total de segundos en un día (60 segundos * 60 minutos * 24 horas). Dividir los segundos ingresados ​​por este valor nos da el número de días. Solo necesitamos la parte completa, así que usamos Math.floor porque la pieza fraccionaria la maneja esta parte:

(new Date(123456 * 1000)).toISOString().substr(11, 8)

la explicación se puede encontrar aquí:

¿Convertir segundos a HH-MM-SS con JavaScript?

Solo genera hh:mm:ss, sin días. Así que la primera parte y esta parte es una combinación perfecta.

Concatenamos usando dos puntos (:) como separador. La cadena se ve así:

'1:10:17:36'

Lo dividimos en una matriz con .split(":");. Luego, finalmente, formateamos los elementos de la matriz para la salida deseada.

  • Si bien este fragmento de código puede resolver el problema, no explica por qué ni cómo responde la pregunta. Por favor incluye una explicación para tu código, ya que eso realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, y es posible que esas personas no conozcan los motivos de su sugerencia de código.

    –Luca Kiebel

    24 de enero a las 9:18

  • Editado, proporcionó una explicación sugerida por @Luca Kiebel

    – Heidi Maknow

    25 de enero a las 12:58

avatar de usuario
Niklesh Raut

Usar Math de esta manera, segundo parámetro en parseInt es para la base, que es opcional

var seconds = parseInt(123456, 10);

var days = Math.floor(seconds / (3600*24));
seconds  -= days*3600*24;
var hrs   = Math.floor(seconds / 3600);
seconds  -= hrs*3600;
var mnts = Math.floor(seconds / 60);
seconds  -= mnts*60;
console.log(days+" days, "+hrs+" Hrs, "+mnts+" Minutes, "+seconds+" Seconds");

Tus segundos dados 123456 sería 1 days, 10 Hrs, 17 Minutes, 36 Seconds no 1 days, 4 Hrs, 40 Minutes, 45 Seconds

avatar de usuario
gran sam

¡Aquí está mi solución, una función simple que se redondeará al segundo más cercano!

var returnElapsedTime = function(epoch) {
  //We are assuming that the epoch is in seconds
  var hours = epoch / 3600,
      minutes = (hours % 1) * 60,
      seconds = (minutes % 1) * 60;
  return Math.floor(hours) + " hours, " + Math.floor(minutes) + " minutes, " + Math.round(seconds) + " seconds";
}

function countdown(s) {

  const d = Math.floor(s / (3600 * 24));

  s  -= d * 3600 * 24;

  const h = Math.floor(s / 3600);

  s  -= h * 3600;

  const m = Math.floor(s / 60);

  s  -= m * 60;

  const tmp = [];

  (d) && tmp.push(d + 'd');

  (d || h) && tmp.push(h + 'h');

  (d || h || m) && tmp.push(m + 'm');

  tmp.push(s + 's');

  return tmp.join(' ');
}

// countdown(3546544) -> 41d 1h 9m 4s
// countdown(436654) -> 5d 1h 17m 34s
// countdown(3601) -> 1h 0m 1s
// countdown(121) -> 2m 1s

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad