2015-04-26 6 views
1

Когда я запускаю функцию обратного отсчета внутри setIntervals, она возвращает одинаковый вывод каждую секунду, но значение, которое я передаю функции, изменяется. Вот jsFiddleНеверный результат функции от setInterval

var date = new Date(2017, 3, 27, 21).getTime(); 
function countdown(milliseconds) { 
    console.log(milliseconds); 
    var CDDate = { 
     seconds: 0, 
     minutes: 0, 
     hours: 0, 
     days: 0 
    } 
    x = milliseconds/1000; 
    CDDate.seconds = Math.round(x % 60); 
    x /= 60; 
    CDDate.minutes = Math.round(x % 60); 
    x /= 60; 
    CDDate.hours = Math.round(x % 25); 
    x /= 24; 
    CDDate.days = Math.floor(x); 
    return CDDate; 
} 

var diff = date - Date.now(); 
setInterval(function(){ 
    console.log(countdown(--diff)); 
},1000) 
+10

Вы считаете, что за миллион секунд каждую секунду требуется несколько часов, прежде чем вы увидите какие-либо изменения в секундах и минутах. – adeneo

+0

@adeneo oh stupid me:/да глупый вопрос – Almis

+0

https://jsfiddle.net/adeneo/ wre8zgat/1 / – adeneo

ответ

0

Вот рабочий пример кода:

var date = new Date(2017, 3, 27, 21).getTime(); 
 
function countdown(milliseconds) { 
 
    var CDDate = { 
 
     seconds: 0, 
 
     minutes: 0, 
 
     hours: 0, 
 
     days: 0 
 
    } 
 
    x = milliseconds; 
 
    CDDate.seconds = Math.round((x+30) % 60); 
 
    x = (x/60); 
 
    CDDate.minutes = Math.round(x % 60); 
 
    x = x/60; 
 
    CDDate.hours = Math.round(x % 24); 
 
    x = x/24; 
 
    CDDate.days = Math.floor(x); 
 
    return CDDate; 
 
} 
 
var diff = date - Date.now(); 
 
diff = diff/1000; 
 
setInterval(function(){ 
 
    var returnVal = countdown(--diff); 
 
    document.getElementById('low').innerHTML = returnVal.seconds; 
 
    document.getElementById('min').innerHTML = returnVal.minutes; 
 
    document.getElementById('hrs').innerHTML = returnVal.hours; 
 
    document.getElementById('day').innerHTML = returnVal.days; 
 
},1000)
Seconds: <div id="low"></div> 
 
Minuts: <div id="min"></div> 
 
Hours: <div id="hrs"></div> 
 
Days: <div id="day"></div> 
 
<div id="mil"></div>

Вы рассчитывали миллисекунды, как второй и в setInterval функции вы прошли 1 сек. время для вызова функции.

Я добавил эту строку: diff = diff/1000; после того, как вычислить diff и преобразовать его во второй. Теперь он работает нормально.

Смежные вопросы