2011-06-08 58 views
0

我正在創建一個倒計時來計算我打算觀看的euro2012比賽之間的時間。 我已經提供了一個工作版本,但我不明白爲什麼它有時會給我帶來負面的價值。 我認爲這與我使用getTime()方法編寫它的方式有關。 這是我的代碼,你們能幫我找出解決這些負面的價值嗎? 非常感謝您提前。在基於javascript的倒數計算中解決負值

<body onload="timeto2012()"> 
<script type="text/javascript"> 
function timeto2012() { 
var euro2012 = new Date(2012, 5, 10, 20, 45); 
var euro2012ms = euro2012.getTime(); 
var now = new Date(); 
var nowms = now.getTime(); 

var diff = euro2012ms - nowms; 

var seconds = 1000; 
var minutes = seconds*60; 
var hours = minutes*60; 
var days = hours*24; 
var years = days*365; 

var ddays = diff/days; 
var dhours = (ddays - Math.round(ddays,1))*24; 
var dminutes = (dhours - Math.round(dhours))*60; 
var dseconds = (dminutes - Math.round(dminutes))*60; 

document.getElementById("time").innerHTML='' + Math.round(ddays,1) +' days '+ Math.round(dhours,1) +' hours '+ Math.round(dminutes,1) +' minutes '+ Math.round(dseconds,1) + ' seconds remaining'; 

} 

t=setInterval(timeto2012,500); 

</script> 
<div id="time"></div> 
</body> 
+0

你應該接受被張貼到你以前的答案的答案。 – stefgosselin 2011-06-08 17:18:17

+0

這裏是一個小提琴玩:http://jsfiddle.net/YHktx/1/ – 2011-06-08 17:19:38

+0

Aleksi,仍然顯示負秒... – KOGI 2011-06-08 17:30:03

回答

1

科吉已經回答了你的問題:你應該使用Math.floor而不是Math.round

當有x分鐘和30-59秒,(x - Math.round(x))將相當於(x - (x + 1))舍入完成後。

var ddays = diff/days; 
var dhours = (ddays - Math.floor(ddays))*24; 
var dminutes = (dhours - Math.floor(dhours))*60; 
var dseconds = (dminutes - Math.floor(dminutes))*60; 

小提琴:http://jsfiddle.net/YHktx/3/

0

這裏有您(從阿列克西Yrttiaho的的jsfiddle派生)一些更好的計算

var seconds = 1000; 
var minutes = seconds*60; 
var hours = minutes*60; 
var days = hours*24; 
var years = days*365; 

var ddays = Math.floor(diff/days); 
var dhours = Math.floor((diff % days)/hours); 
var dminutes = Math.floor(((diff % days) % hours)/minutes); 
var dseconds = Math.floor((((diff % days) % hours) % minutes)/seconds);