Solved

# Javascript countdown timer

Posted on 2009-03-29
Medium Priority
315 Views
I'm trying to create a countdown timer in javascript for a web page.  Everything appears to be working correctly except for the seconds. I think it must be my calculation, but I don't know what else to try. Can  anyone see where I'm going wrong?
``````function calculate()
{
var startDate = new Date()
var endDate = new Date("May 19, 2009, 21:00:00")

var secPerYear = 60*60*24*365;
var secPerDay = 60*60*24;
var secPerHour = 60*60;
var secPerMin = 60;

//seconds left right now
var seconds = (endDate.getTime() - startDate.getTime()) / 1000

//get years left value
var years = Math.floor(seconds / secPerYear)

//remove seconds from year
seconds = seconds - (years * secPerYear)

//get day value
var days = Math.floor(seconds / secPerDay)

//remove seconds from day
seconds = seconds - (days * secPerDay)

//get hours value
var hours = Math.floor(seconds / secPerHour)

//remove seconds from hours
seconds = seconds - (hours * secPerHour)

//get minutes
var minutes = Math.floor(seconds / secPerMin)

//remove seconds from minutes
seconds = seconds - (seconds * secPerMin)

seconds = (seconds / 1000);

lblYears.innerHTML = years
lblDays.innerHTML = days
lblHours.innerHTML = hours
lblMinutes.innerHTML = minutes
lblSeconds.innerHTML = seconds
``````
0
Question by:98fatboyrider

LVL 31

Assisted Solution

Frosty555 earned 800 total points
ID: 24013712
Everything looks fairly sound, but I think your last line:

seconds = (seconds / 1000);

Isn't necessary. Your seconds are already in seconds, you shouldn't need to divide by 1000 again.
0

LVL 15

Assisted Solution

fsze88 earned 1200 total points
ID: 24019503
you can try this, much more simplified
<script type="text/javascript">

var startDate = new Date()
var endDate = new Date("May 1, 2009, 22:50:00")
var differentDate;
differentDate = new  Date(endDate - startDate);
document.write("differentDate.getSeconds() : " + differentDate.getSeconds() + "<br/>" );
document.write("differentDate.getMinutes() : " + differentDate.getMinutes() + "<br/>" );
document.write("differentDate.getHours() : " + differentDate.getHours() + "<br/>" );
document.write("differentDate.getDate() : " + differentDate.getDate() + "<br/>" );
document.write("differentDate.getMonth() : " + (differentDate.getMonth()-1) + "<br/>" );
document.write("differentDate.getFullYear() : " + differentDate.getFullYear() + "<br/>" );
</script>
0

Accepted Solution

98fatboyrider earned 0 total points
ID: 24068334
Turns out it was a calculation error at line 38. I should have been multiplying by minutes, not seconds. Once that was working, I rounded the result to trim the milliseconds. Thanks for the help.
``````function calculate()
{
var startDate = new Date()
var endDate = new Date("May 12, 2009, 21:00:00")

var secPerYear = 60*60*24*365;
var secPerDay = 60*60*24;
var secPerHour = 60*60;
var secPerMin = 60;

//seconds left right now
var seconds = (endDate.getTime() - startDate.getTime()) / 1000

//get years left
var years = Math.floor(seconds / secPerYear)

//remove seconds from year
seconds = seconds - (years * secPerYear)

//get days
var days = Math.floor(seconds / secPerDay)

//remove seconds from day
seconds = seconds - (days * secPerDay)

//get hours value
var hours = Math.floor(seconds / secPerHour)

//remove seconds from hours
seconds = seconds - (hours * secPerHour)

//get minutes
var minutes = Math.floor(seconds / secPerMin)

//remove seconds from minutes
seconds = seconds - (minutes * secPerMin)

seconds = Math.round(seconds) -1

lblYears.innerHTML = years
lblDays.innerHTML = days
lblHours.innerHTML = hours
lblMinutes.innerHTML = minutes
lblSeconds.innerHTML = seconds
}
``````
0

## Featured Post

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.