Count Up from Date and Time with Javascript
Expanding on my previous Javascript countdown timer, I’ve got an easy count up from date counter using pure JavaScript here for you!
Example: Counting up from 1st Jan 2014 12:00:00
00days00hours00minutes00seconds
The basic HTML:
<div class="countup" id="countup1">
<span class="timeel days">00</span>
<span class="timeel timeRefDays">days</span>
<span class="timeel hours">00</span>
<span class="timeel timeRefHours">hours</span>
<span class="timeel minutes">00</span>
<span class="timeel timeRefMinutes">minutes</span>
<span class="timeel seconds">00</span>
<span class="timeel timeRefSeconds">seconds</span>
</div>
The Pure Javascript:
Just add the date you want to count up from on line ~7, (where the countUpFromTime
function is first called).
/*
* Basic Count Up from Date and Time
* Author: @mrwigster / https://guwii.com/bytes/count-date-time-javascript/
*/
window.onload = function() {
// Month Day, Year Hour:Minute:Second, id-of-element-container
countUpFromTime("Jan 1, 2014 12:00:00", 'countup1'); // ****** Change this line!
};
function countUpFromTime(countFrom, id) {
countFrom = new Date(countFrom).getTime();
var now = new Date(),
countFrom = new Date(countFrom),
timeDifference = (now - countFrom);
var secondsInADay = 60 * 60 * 1000 * 24,
secondsInAHour = 60 * 60 * 1000;
days = Math.floor(timeDifference / (secondsInADay) * 1);
hours = Math.floor((timeDifference % (secondsInADay)) / (secondsInAHour) * 1);
mins = Math.floor(((timeDifference % (secondsInADay)) % (secondsInAHour)) / (60 * 1000) * 1);
secs = Math.floor((((timeDifference % (secondsInADay)) % (secondsInAHour)) % (60 * 1000)) / 1000 * 1);
var idEl = document.getElementById(id);
idEl.getElementsByClassName('days')[0].innerHTML = days;
idEl.getElementsByClassName('hours')[0].innerHTML = hours;
idEl.getElementsByClassName('minutes')[0].innerHTML = mins;
idEl.getElementsByClassName('seconds')[0].innerHTML = secs;
clearTimeout(countUpFromTime.interval);
countUpFromTime.interval = setTimeout(function(){ countUpFromTime(countFrom, id); }, 1000);
}
The very basic styling for the top example, you can do better I’m sure!
<style>
.countup {
text-align: center;
margin-bottom: 20px;
}
.countup .timeel {
display: inline-block;
padding: 10px;
background: #151515;
margin: 0;
color: white;
min-width: 2.6rem;
margin-left: 13px;
border-radius: 10px 0 0 10px;
}
.countup span[class*="timeRef"] {
border-radius: 0 10px 10px 0;
margin-left: 0;
background: #e8c152;
color: black;
}
</style>
Looking for it to show Years instead of days?
Use this code:
<div class="countup" id="countup1">
<span class="timeel years">00</span>
<span class="timeel timeRefYears">years</span>
<span class="timeel days">00</span>
<span class="timeel timeRefDays">days</span>
<span class="timeel hours">00</span>
<span class="timeel timeRefHours">hours</span>
<span class="timeel minutes">00</span>
<span class="timeel timeRefMinutes">minutes</span>
<span class="timeel seconds">00</span>
<span class="timeel timeRefSeconds">seconds</span>
</div>
window.onload = function() {
// Month Day, Year Hour:Minute:Second, id-of-element-container
countUpFromTime("Jan 1, 2014 12:00:00", 'countup1'); // ****** Change this line!
};
function countUpFromTime(countFrom, id) {
countFrom = new Date(countFrom).getTime();
var now = new Date(),
countFrom = new Date(countFrom),
timeDifference = (now - countFrom);
var secondsInADay = 60 * 60 * 1000 * 24,
secondsInAHour = 60 * 60 * 1000;
days = Math.floor(timeDifference / (secondsInADay) * 1);
years = Math.floor(days / 365);
if (years > 1){ days = days - (years * 365) }
hours = Math.floor((timeDifference % (secondsInADay)) / (secondsInAHour) * 1);
mins = Math.floor(((timeDifference % (secondsInADay)) % (secondsInAHour)) / (60 * 1000) * 1);
secs = Math.floor((((timeDifference % (secondsInADay)) % (secondsInAHour)) % (60 * 1000)) / 1000 * 1);
var idEl = document.getElementById(id);
idEl.getElementsByClassName('years')[0].innerHTML = years;
idEl.getElementsByClassName('days')[0].innerHTML = days;
idEl.getElementsByClassName('hours')[0].innerHTML = hours;
idEl.getElementsByClassName('minutes')[0].innerHTML = mins;
idEl.getElementsByClassName('seconds')[0].innerHTML = secs;
clearTimeout(countUpFromTime.interval);
countUpFromTime.interval = setTimeout(function(){ countUpFromTime(countFrom, id); }, 1000);
}