решить отрицательные значения в отсчете на основе JavaScript - PullRequest
0 голосов
/ 08 июня 2011

Я создаю обратный отсчет времени, чтобы посчитать время между матчем euro2012, который я намерен смотреть. Я пришел с рабочей версией этого, но я не понимаю, почему это иногда дает мне отрицательные значения. Я думаю, что это связано с тем, как я это написал, используя метод getTime (). Вот мой код, не могли бы вы, ребята, помочь мне разобраться с этими отрицательными значениями? Заранее большое спасибо.

<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>

Ответы [ 2 ]

1 голос
/ 08 июня 2011

KOGI имеет ответ на вашу проблему: вы должны использовать 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 голосов
/ 08 июня 2011

Вот несколько лучших расчетов для вас (полученных из 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 );
...