Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Countdown based on timezone with jQuery

I worked with this:

(function() {

  var timeElement, eventTime, currentTime, duration, interval, intervalId;

  interval = 1000; // 1 second

  // get time element
  timeElement = document.querySelector("#countdown");
  // calculate difference between two times
  eventTime = moment.tz("2022-05-29T08:00:00", "Europe/Berlin");
  // based on time set in user's computer time / OS
  currentTime = moment.tz();
  // get duration between two times
  duration = moment.duration(eventTime.diff(currentTime));

  // loop to countdown every 1 second
  setInterval(function() {
    // get updated duration
    duration = moment.duration(duration - interval, 'milliseconds');

    // if duration is >= 0
    if (duration.asSeconds() <= 0) {
      clearInterval(intervalId);
      // hide the countdown element
      timeElement.classList.add("hidden");
    } else {
      // otherwise, show the updated countdown
      timeElement.innerText = duration.days() + ":" + duration.hours() + ":" + duration.minutes() + ":" + duration.seconds();
    }
  }, interval);

}());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.17/moment-timezone-with-data-2012-2022.min.js"></script>

<div id="countdown"></div>

Unfortunately, the time doesn’t get calculated correctly. If you change for example 2022-05-29 to 2022-08-29, nothing changes. Additionally, every value should have two digits.

Has someone an idea to fix that? Would be very thankful!

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

Your question about momentjs is answered here; use asDays() not days()

You can pad a string with 0’s using the function padStart(length, withWhat) Mozilla Developer Network Documentation

//...snip...
    } else {
      // otherwise, show the updated countdown
      timeElement.innerText =
        duration.asDays().toFixed().padStart(2, 0) + ":" +
        duration.hours().toString().padStart(2, 0) + ":" +
        duration.minutes().toString().padStart(2, 0) + ":" + 
        duration.seconds().toString().padStart(2, 0);
    }
//...snip...
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading