Search code examples
javascriptcounter

Countdown Hours Minutes Seconds


I'd like to create a countdown that count every hours, minutes, seconds remaining to 00:00:00 on July 13th at 12AM Miami time.

I'd like to addapt that code snippet and i struggle with calculs. How shoud i adapt that code snippet for me to display hours, minutes, seconds instead of days, hours, minutes, seconds ?

How should i write the date for it to be 00:00:00 on July 13th at 12AM Miami time ? What should i try next ?

Thanks.

<p id="demo"></p>

<script>
// Set the date we're counting down to
var countDownDate = new Date("Jan 5, 2022 15:37:25").getTime();

// Update the count down every 1 second
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 = countDownDate - now;

  // Time calculations for days, hours, minutes and seconds
  var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((distance % (1000 * 60)) / 1000);

  // Display the result in the element with id="demo"
  document.getElementById("demo").innerHTML = days + "d " + hours + "h "
  + minutes + "m " + seconds + "s ";

  // If the count down is finished, write some text
  if (distance < 0) {
    clearInterval(x);
    document.getElementById("demo").innerHTML = "EXPIRED";
  }
}, 1000);
</script>

-- WayneOS code snipped modification

// Format output-string
  var outputHours =  (hours < 10 ? '0' + hours : hours);
  var outputMinutes = (minutes < 10 ? '0' + minutes : minutes);
  var outputSeconds = (seconds < 10 ? '0' + seconds : seconds);

  // Display the result in the element with id="demo"
  if (distance > 0)
      document.getElementById("hours").innerHTML = outputHours;
      document.getElementById("minutes").innerHTML = outputMinutes;
      document.getElementById("seconds").innerHTML = outputSeconds;

  else
      document.getElementById("hours").innerHTML = "EXPIRED";

}, 1000);
```

Solution

  • You could use a loop to calculate the hours, minutes and seconds until distance is smaller than 1000. For it to end on Jul 13 12:00:00 use new Date("Jul 13, 2021 12:00:00 GMT-4") Here is an example.

    // Set the date we're counting down to
    var countDownDate = new Date("Jul 13, 2021 12:00:00 GMT-4").getTime();
    
    // Update the count down every 1 second
    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 = countDownDate - now;
    
      // Time calculations for hours, minutes and seconds
      var hours   = 0;
      var minutes = 0;
      var seconds = 0;
      while (true)
        if (distance >= (1000*60*60)) {
        
          hours++;
          distance -= (1000*60*60);
        
        } else
        if (distance >= (1000*60)) {
        
          minutes++;
          distance -= (1000*60);
        
        } else
        if (distance >= 1000) {
        
          seconds++;
          distance -= 1000;
        
        } else
          break;
    
      // Format output-string
      var hours   = (hours < 10 ? '0' + hours : hours);
          minutes = (minutes < 10 ? '0' + minutes : minutes);
          seconds = (seconds < 10 ? '0' + seconds : seconds);
    
      // Display the result in the element with id="demo"
      if (distance > 0) {
          document.getElementById("hours").innerHTML = hours;
          document.getElementById("minutes").innerHTML = minutes;
          document.getElementById("seconds").innerHTML = seconds;
      } else
          document.getElementById("hours").innerHTML = "EXPIRED";
    
    }, 1000);
    <div id="hours"></div>
    <div id="minutes"></div>
    <div id="seconds"></div>