How to create a simple JavaScript Countdown Timer
This is a simple JavaScript countdown timer I have used many times in the past. This script works great when you need to display the time remaining for a specific activity and have it count down until that time is reached.
First, we’ll go over the basic stand-alone script. This script will count down the days, hours, minutes, and seconds until our target date and time and display that countdown in a div with id=’timer’. For our example the target date and time is December 31, 2050 17:00:00. Once we pass the target date and time the timer will display the literal text “Ended”.
<div id='timer'></div>
<script type='text/javascript'>
var countDownDate = new Date('Dec 31, 2050 17:00:00').getTime();
var x = setInterval(function() {
var now = new Date().getTime();
var distance = countDownDate - now;
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);
document.getElementById('timer').innerHTML = days + 'd ' + hours + 'h ' + minutes + 'm ' + seconds + 's ';
if (distance < 0) { clearInterval(x); document.getElementById('timer').innerHTML = 'Ended'; } }, 1000);
</script>
Here is an example where we pass the date as a parameter. This is useful for dynamic content. For example I’ve used this on an auction page where the auction end date and time varies by listing.
<div id='timer'></div>
<script type='text/javascript'>
function fnSetTimer(ParmDate)
{
var countDownDate = new Date(ParmDate).getTime();
var x = setInterval(function() {
var now = new Date().getTime();
var distance = countDownDate - now;
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);
//document.getElementById('timer').innerHTML = days + 'd ' + hours + 'h ' + minutes + 'm ' + seconds + 's ';
// display as hours:minutes:seconds with leading zeros
document.getElementById('timer').innerHTML = String(hours).padStart(2,'0') + ':' + String(minutes).padStart(2,'0') + ':' + String(seconds).padStart(2,'0');
if (distance < 0) { clearInterval(x); document.getElementById('timer').innerHTML = 'Ended'; } }, 1000); } </script>
Then with a little PHP code we can pass our date value to the script to populate the timer div.
<?php
$auction_stop = "2020-12-31 17:00:00";
echo "<script>\n";
echo " fnSetTimer('$auction_stop');\n";
echo "</script>\n";
?>
In this example I hard coded the stop date/time ($auction_stop) to show the format needed, you would likely obtain dynamic values from a database or calculation.
I didn’t need the number of days and wanted the hours, minutes, and seconds to display with leading zeros. For example 10:05:00.
![]()
Click Here for a Working Example
References
Javascript Date
Javascript setInterval
Javascript Math
Javascript getElementById
Javascript padStart
