Search code examples
javascriptcountdown

Countdown timer - Hide variables as they expire


looking for help with a countdown timer I have to reveal a container the page at a specific time. I'd like the "days" "hours" "minutes" to disappear when they reach zero.

Can anyone help?

<h3 id="demo"></h3>

<script>
// Set the date we're counting down to
var countDownDate = new Date("1/21/2022 11:00:00").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);
    
  // Output the result in an element with id="demo"
  document.getElementById("demo").innerHTML = days + " day " + hours + " hours " +  minutes + " min " + seconds + " sec ";
    
  // If the count down is over, write some text 
  if (distance < 0) {
    clearInterval(x);
    document.getElementById("demo").innerHTML = "Reserve Tickets";
  }
}, 1000);
</script> 

Solution

  • Update variables only if distance > 0

    <h3 id="demo"></h3>
    
    <script>
    // Set the date we're counting down to
    var countDownDate = new Date("1/21/2022 11:00:00").getTime();
    
    // Update the count down every 1 second
    var x = setInterval(function() {
    
      // Get today's date and time
      let now = new Date().getTime();
        
      // Find the distance between now and the count down date
      let distance = countDownDate - now;
        
      // If the count down is over, write some text 
      if (distance >= 0) {
        // Time calculations for days, hours, minutes and seconds
        let days = Math.floor(distance / (1000 * 60 * 60 * 24)); 
        let hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
        let minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
        let seconds = Math.floor((distance % (1000 * 60)) / 1000);
    
      // Output the result in an element with id="demo"
      document.getElementById("demo").innerHTML = days + " day " + hours + " hours " +  minutes + " min " + seconds + " sec ";
    
      } else {
    
        clearInterval(x);
        document.getElementById("demo").innerHTML = "Reserve Tickets";
      }
    }, 1000);
    </script>