2011-06-08 62 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);