Need to create a countdown timer for your web app? Well, there’s no need to bloat your web app with complicated third-party libraries. Let Master Coffee walk you through 2 simple countdown timers, all made in pure HTML CSS Javascript – Let’s go!
CODE DOWNLOAD
I have released this under the MIT license, feel free to use it in your own project – Personal or commercial. Some form of credits will be nice though.
VIDEO TUTORIAL
1) COUNTDOWN IN SECONDS
1A) DEMO
This demo is set to count down from 10 in an endless loop.
1B) THE HTML
<div class="countdown">10</div>
All we need for the HTML is a <div class="countdown">
container and the number of seconds to begin with.
1C) THE JAVASCRIPT
function countdown () {
// (PART A) GET HTML & TIME REMAINING
let wrapper = document.querySelector(".countdown"),
remain = +wrapper.innerHTML - 1;
wrapper.innerHTML = remain;
// (PART B) NEXT CYCLE
if (remain > 0) { setTimeout(countdown, 1000); }
else { /* THE END - DO SOMETHING */ }
}
setTimeout(countdown, 1000);
The entire countdown mechanism is contained within function countdown ()
.
- Get the remaining time, decrement it by 1 second, and update the HTML.
- Loop until the remaining time hits 0.
2) COUNTDOWN TO DATE
2A) DEMO
This demo is set to count down to 2 days from now.
2B) THE HTML
<div class="countdown"></div>
Same as the previous example, we only need a <div class="countdown">
container, but it’s empty now.
2C) THE JAVASCRIPT
var countdown = {
// (PART A) PROPERTIES
remain : 0, // remaining time in seconds
segments : {}, // html remaining time
// (PART B) INITIALIZE
init : () => {
// (B1) NOW, TILL, REMAINING SECONDS
let now = new Date(), till = new Date();
till.setDate(till.getDate() + 2); // 2 days from now
countdown.remain = Math.floor((till - now) / 1000);
// (B2) ADD HTML TIME SEGMENTS
let add = s => {
let segment = document.createElement("div");
segment.className = "segment";
segment.innerHTML = `<div class="left"></div><div class="name">${s}</div>`;
document.querySelector(".countdown").appendChild(segment);
countdown.segments[s] = segment.querySelector(".left");
};
// 1 min = 60 sec | 1 hr = 3600 sec | 1 day = 86400 sec
if (countdown.remain >= 86400) { add("day"); }
if (countdown.remain >= 3600) { add("hr"); }
if (countdown.remain >= 60) { add("min"); }
add("sec");
// (B3) TICKER DOWN
setTimeout(countdown.ticker, 1000);
},
// (PART C) TICKER COUNTDOWN
ticker : () => {
// (C1) UPDATE REMAINING TIME
countdown.remain--;
if (countdown.remain <= 0) {
for (let v of Object.values(countdown.segments)) { v.innerHTML = 0; }
console.log("THE END - DO SOMETHING");
return;
}
// (C2) REMAINING TIME
let remain = { sec : countdown.remain };
if (remain.sec >= 60) {
remain.min = Math.floor(remain.sec / 60);
remain.sec -= remain.min * 60;
} else { remain.min = 0; }
if (remain.min >= 60) {
remain.hr = Math.floor(remain.min / 60);
remain.min -= remain.hr * 60;
} else { remain.hr = 0; }
if (remain.hr >= 24) {
remain.day = Math.floor(remain.hr / 24);
remain.hr -= remain.day * 24;
} else { remain.day = 0; }
// (C3) UPDATE HTML TIME SEGMENTS
for (let [k,v] of Object.entries(countdown.segments)) { v.innerHTML = remain[k]; }
// (C4) NEXT CYCLE
setTimeout(countdown.ticker, 1000);
}
};
// (PART D) START
window.addEventListener("load", countdown.init);
This can be “scary” to some beginners, but it is easier to trace in this order:
- All of the countdown mechanics are contained within
var countdown = {}
. - (B & D) On window load, we call
countdown.init()
.- (B1) For this example, we will countdown from now to 2 days from now –
countdown.remain
is the number of seconds remaining. - (B2) Add the HTML “time remaining” segments accordingly – Days, hours, minutes, and seconds.
- (B3) Call
countdown.ticker()
every 1 second to countdown.
- (B1) For this example, we will countdown from now to 2 days from now –
- (C) Countdown mechanics.
- (C1) Decrement
countdown.remain
. Captain Obvious – If it hits 0, it’s the end. - (C2) Calculate the remaining time in seconds, minutes, hours, and days.
- (C3) Update the HTML time remaining.
- (C4) Loop and call
countdown.ticker()
until it hits 0.
- (C1) Decrement
THE END – A COUPLE OF NOTES ON THE DATE
That’s all for this short tutorial and sharing. But before we end, here are a couple of notes on setting the date:
- There are many ways to set a date in Javascript, such as
new Date(2077, 02, 01, 12, 34, 56)
andnew Date("2077-03-12T12:34:56")
– You can check the Date constructor documentation for more. - By default,
new Date()
is fixed to the timezone of the user’s device. - If you want an “accurate end date”, I will recommend fixing it to Date.UTC().
CHEAT SHEET
