2015-03-27 4 views
0

У меня есть игра, которую я делаю в стиле ZORK, и она имеет постоянные оповещения и подсказки и включает в себя время, необходимое для его победы.Часы, основанные на реальном времени

Поскольку у него есть предупреждения и подсказки для игры, я не могу использовать заданный тайм-аут для запуска часов, поэтому я создал часы на основе реального времени, но у меня возникли проблемы с его работой.

Вот код

var now = new Date(); 

var stS = now.getSeconds(); 
var stM = now.getMinutes(); 
var stH = now.getHours(); 



function getElapsedTime() { 

setTimeout(function() { 




var reS = now.getSeconds(); 
var reM = now.getMinutes(); 
var reH = now.getHours(); 

var elapS = reS - stS; 
var elapM = reM - stM; 
var elapH = reH - stH; 

if (elapM < 0) { 
    reM = reM + 60; 
    elapM = reM - stM; 

} 

if (elapS < 0) { 
    reS = reS + 60; 
    elapS = reS - stS; 
} 


alert(elapS); 
alert(elapM); 
alert(elapH); 
}, 10000); 

} 
getElapsedTime(); 

Edit: я запустить его в jsfiddle, но она возвращает предупреждение о том, что нет времени прошло, когда он должен сказать, прошло десять секунд. http://jsfiddle.net/t57wsrx8/

+0

Что не работает? Не могли бы вы показать нам пример в codepen или jsfiddle? –

+0

Что не работает? это дает вам неправильный вывод? день неправильный? это время назад? – Adjit

+0

Я должен был быть более ясным. Когда я запускаю его jsfiddle, он дает информацию, но в нем говорится, что времени не прошло. http://jsfiddle.net/t57wsrx8/ –

ответ

1

Ты используешь тот же самый now что вы начали с 10 секунд раньше. Объект Date сохраняет время, которое было дано. С течением времени он автоматически не меняется. Вам нужно создать экземпляр нового now:

function getElapsedTime() { 

    setTimeout(function() { 

     var now = new Date(); 

     var reS = now.getSeconds(); 
     var reM = now.getMinutes(); 
     var reH = now.getHours(); 

     var elapS = reS - stS; 
     var elapM = reM - stM; 
     var elapH = reH - stH; 

     if (elapM < 0) { 
      reM = reM + 60; 
      elapM = reM - stM; 
     } 

     if (elapS < 0) { 
      reS = reS + 60; 
      elapS = reS - stS; 
     } 

     alert(elapS); 
     alert(elapM); 
     alert(elapH); 
    }, 10000); 
} 

Обратите внимание, что вы можете рассчитать время охватывает более чисто, если рассматривать даты как номера:

var start = +new Date(); 
 

 
function getElapsedTime() { 
 
    setTimeout(function() { 
 
     var elapsed = +new Date() - start; 
 
     
 
     var elapS = Math.floor(elapsed/ 1000) % 60; 
 
     var elapM = Math.floor(elapsed/ 60000) % 60; 
 
     var elapH = Math.floor(elapsed/3600000) % 24; 
 

 
     alert(elapS); 
 
     alert(elapM); 
 
     alert(elapH); 
 
    }, 10000); 
 
} 
 
getElapsedTime();

+0

Спасибо за помощь! Это сработало отлично! –

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