2014-10-13 5 views
0

현재 부분적으로 작동하는 솔루션이 있지만 나에게 올바른 반복을 알 수는 없습니다. 나는 또한 이것을 완전히 잘못 할 수도있다. PHP에서 처음에는 현재 시간을 가져 와서 마이크로 초로 변환합니다. 차이가 가장 가까운 반 시간에 주어진 있도록 계산 것 : 나는 EaselJS으로, 자바 스크립트에 쓰고 시스템에 JSON 파일에 넣고 전송JS/PHP의 Microtime에서 서버 시간에서 가장 가까운 30 시간까지 어떻게 카운트 다운합니까?

$remaining = 30 - (date('i', time()) % 30); 

. (편집 : 나는 그것이 바로 전송되기 전에 MicroTime로 변환됩니다 언급하는 것을 잊었다) :

function UpdateGame(event) 
{ 
    if (ready == true) 
    { 
     stage.update(); 

     if (TickTimerReady == true) 
     { 
      ticktimer = ticktimer - 1000000; 
      console.log(ticktimer); 
     } 
    } 
} 

을 지금 여기에 파일을, 부울이 "사실"에 이성을 상실하고는 카운트 다운이 시작로드되면

까다로운 부분 : UpdateGame은 40FPS에서 실행되는 틱 기반 이벤트입니다. 서버가 실행하는 것과 동시에 30 분에 도달하도록 틱 티머에서 빼기 위해 적절한 값을 계산하려면 어떻게해야합니까? 나는 그것이 약간 벗어날지도 모른다는 것을 이해한다 ... 그러나 1000000은 분명히 아니다!

+0

서버와 클라이언트 사이의 오프셋을 계산하고 클라이언트에서 모든 계산을 수행하는 것이 더 간단합니다. (new Date (document.lastModified) - performance.timing.domainLookupEnd와 같은) 오프셋을 계산해야합니다. – dandavis

+0

performance.timing을 인식하지 못합니다. 어떻게 사용할 수 있습니까? – Merlin

+0

새 날짜 (performance.timing.responseEnd)는 서버가 날짜를 반환하는 순간과 매우 비슷하지만 클라이언트의 시계에 따라 다릅니다. 클라이언트 시간에서 서버 시간을 빼면 오프셋에 도달합니다. 클라이언트는 서버 시간으로 변환하기 위해 날짜와 함께 오프셋을 더하거나 뺄 필요가 있습니다. performance.timing 값은 지연 보상을 필요로하지 않기 때문에 좋기 때문에 15-25ms 내에 안정적으로 동기화 할 수 있습니다. OS는 예고없이 시계를 조정할 수 있으므로 주기적으로 오프셋을 다시 계산하는 것이 좋습니다. – dandavis

답변

0

서버가 응답 할 때 timer()으로 전화를 걸면 30 분이 지나면해야 할 일은 무엇이든 할 수 있습니다.

var seconds = 0; 
timer = function(){ setInterval(count,1000); } 
count = function(){ 
    seconds++; 
    if (seconds === (30*60)) window.alert("it's been 30 minutes do stuff"); 
}