Tengo este programa simple que toma un tiempo del futuro y crea una cuenta regresiva hasta ese momento:
var x = setInterval(function() { // Get today's date and time var now = new Date().getTime(); // Find the distance between now and the count down date var distance = Number(String(timerOrigin.innerHTML)+"000") - now; // Time calculations for days, hours, minutes and seconds //Days are not displayed, only used to help calculate hours var days = Math.floor(distance / (1000 * 60 * 60 * 24)); var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)) + (days * 24); if (hours.length == 1) { hours= "0" + hours; } var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); if (minutes.length == 1) { minutes= "0" + minutes; } var seconds = Math.floor((distance % (1000 * 60)) / 1000); if (seconds.length == 1) { seconds = "0" + seconds; } // Display the time timer.innerHTML = hours + ":" + minutes + ":" + seconds; // If the count down is finished, Display score if (distance < 0) { clearInterval(x); timer.innerHTML = homeTeamScore.innerHTML + "-" + awayTeamScore.innerHTML; } }, 1000); //Push to Dom sideScore.appendChild(timer)El problema que tengo es que las declaraciones if de un solo dígito no funcionan.
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)) + (days * 24); if (hours.length == 1) { hours= "0" + hours; }esto devolverá 4:22:22 mientras que el resultado deseado es 04:22:22. Sé que me estoy perdiendo algo en alguna parte, pero no puedo identificarlo. También realicé algunas pruebas de registro y el programa ni siquiera entra en las declaraciones if. La consola tampoco devuelve errores. ¿Quizás es un problema con el alcance ya que todo esto está dentro de un bucle? Cualquier ayuda es apreciada.