2011-08-31 6 views
0

내 요구 사항은 시스템의 클라이언트 시간을 변경하면 디스플레이의 시계가 변경되지 않아야한다는 것입니다. jboss 서버가 있습니다 .. 서버 시간을 표시해야하는 대시 보드가 있습니다 .. 일부 코딩을 완료했지만 내 시스템 타이밍도 dahsboard에서 변경됩니다 .. 여기 내 코드가 있습니다 ..대시 보드의 시계가 시스템 시간이 변경 될 때마다 변경됩니다.

help..where 내가 잘못가는 건가요하십시오 클래스

내가

var month   = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); 
var weekday  = new Array("Sun","Mon","Tue","Wed","Thu","Fri"); 
//Time Display format -Mon May 16 16:48:04 2011 
    //Users time 
    var timeLocal; 
    //Servers time 
    var timeServer; 
    //mill diff between local time and server time 
    var millDiff;  

    //The clock to tick function 
    function toTick(){ 
     timeLocal = new Date(); 
    //add time difference 
    timeLocal.setMilliseconds(timeLocal.getMilliseconds() - millDiff); 

    //display the value 
    document.getElementById("dateAndTime").innerHTML = month[timeLocal.getMonth()]+" "+(timeLocal.getDate() < 10 ? '0'+timeLocal.getDate() : timeLocal.getDate())+", "+timeLocal.getFullYear()+" "+(timeLocal.getHours() < 10 ? '0'+timeLocal.getHours() : timeLocal.getHours())+":"+(timeLocal.getMinutes() < 10 ? '0'+timeLocal.getMinutes() : timeLocal.getMinutes())+":"+(timeLocal.getSeconds() < 10 ? '0'+timeLocal.getSeconds() : timeLocal.getSeconds()); 
    } 

    /** Display Server date and time in header section ends **/ 
    /** 
    * This function will send a remote call to the server and display the date and time in the 
    * gui at the header area 
    */ 
    function getServerDateTime(){ 
     CommonRemoteCall.getServerDateTime({ 
     callback:function(datetime) { 
      document.getElementById("dateAndTime").innerHTML = month[datetime.getMonth()]+" "+(datetime.getDate() < 10 ? '0'+datetime.getDate() : datetime.getDate())+", "+datetime.getFullYear()+" "+(datetime.getHours() < 10 ? '0'+datetime.getHours() : datetime.getHours())+":"+(datetime.getMinutes() < 10 ? '0'+datetime.getMinutes() : datetime.getMinutes())+":"+(datetime.getSeconds() < 10 ? '0'+datetime.getSeconds() : datetime.getSeconds()); 
      //Server time 
      timeServer = datetime; 

       //Users time 
      timeLocal = new Date(); 

      //Calculate the difference (returns milliseconds) 
      millDiff = timeLocal - timeServer; 


     } 
     }); 
    } 

에 javscript

에서 servertime

public Date getServerDateTime() throws Exception { 
     Date serverDateTime = null; 

     try { 
      serverDateTime = new java.util.Date();  

      System.out.println("ServerDateTime-->" +serverDateTime); 

     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return serverDateTime; 
    } 

을 얻고, 그것을 최선의 더 나은 방법 ter에게인가 ???

어떻게 터미널 시계를 사용에서 dashbord을 방지하고 서버 만 클럭을 사용하는

+1

사용자가 페이지를로드 한 후 시계가 변경된다는 의미입니까? [현실에서 누가 그것을합니까?] – epascarello

+0

대시 보드 클럭이 서버 클럭이 아닌 터미널 클럭을 따르는 것이 문제라고 생각합니다. 어떤 시계가 바뀌 었는지에 상관없이 ... –

+0

그래서 와트는 끝내야합니까? 모든 해결책은 ?? – rachel

답변

0

클라이언트 시계 떨어져 그것을 기반으로하는 경우 사용자가 기준점 변경 이후 시계를 변경하면, 그것은 중단됩니다.

사용자가이를 변경하면 어떻게 감지 할 수 있습니까?

디스플레이를 업데이트 할 때 이전 시간을 기억하십시오. 이전 시간이 크게 다를 경우 millDiff으로 다시 조정할 수 있습니다.

참고 : 시간은 결코정확한 때문에 요청이 네트워크를 통해 여행과 시간이 클라이언트에 렌더링 할 페이지를합니다 걸리는 시간이 될 것입니다.

0

은 당신이

new Date(); //or 
Date.now(); //if you like milliseconds 

과 같은 코드를 사용하는 당신은 서버와 클라이언트 사이의 시간 차이를 업데이트하는 방법이 필요합니다. 한 가지 해결책은 예를 들어 1000ms 지연에 window.setInterval을 사용하고 클라이언트 시간이 1000ms와 상당히 다른 양만큼 변경되었는지 확인하는 것입니다. 있다면 서버와 다시 동기화해야합니다.

예를 들면,

var lastTimeLocal = null; 
var interval = 1000; 
var fudge = 0.05; 
window.setInterval(function() { 
    var thisTime = Date.now(); 
    if(lastTimeLocal == null) 
     return; 
    var delta = thisTime - lastTimeLocal; 
    lastTimeLocal = thisTime; 
    if(delta < interval * (1.0 - fudge) || delta > interval * (1.0 + fudge)) 
     getServerDateTime(); 
}, interval); 

그것은 아마 당신의 toTick 기능이 점을 접을 가장 좋은 것입니다,하지만 당신은 할 필요가 없습니다.

관련 문제