2011-08-31 81 views
0

我的要求是,顯示屏中的時鐘不應該改變,因爲我改變了系統的客戶端時間。 我有jboss服務器..有應該顯示服務器時間的儀表板..我做了一些編碼,但是當我改變我的系統時間時鐘也在dahsboard中改變..這裏去我的代碼..隨着系統時間改變,儀表板中的時鐘發生變化

從類我收到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; 
    } 

在javscript

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; 


     } 
     }); 
    } 

請help..where我是布萊恩錯了,是之三杜安它沒有更好的辦法???

如何防止dashbord使用終端時鐘並只使用服務器時鐘

+1

你的意思是用戶在頁面加載後改變他們的時鐘? [誰在現實生活中這樣做?] – epascarello

+0

我想問題是儀表板時鐘跟在終端時鐘,而不是服務器時鐘。不管是否有任何時鐘正在改變... –

+0

因此,需要完成笏???任何解決方案?? – rachel

回答

0

如果基礎它關閉客戶端的時鐘,它會在用戶將時鐘由於基準點的變化打破。

如何檢測用戶何時更改?

跟蹤以前更新顯示的時間。如果前一次顯着不同,您可以通過millDiff重新調整。

注:的時間是NEVER將會是準確的,因爲它需要對請求通過網絡和旅行所花費的時間在網頁客戶端上呈現的時間。

0

只要你使用的是像

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

任何代碼,你需要更新服務器和客戶端之間的時間差的一些方法。一種解決方案是使用window.setInterval,例如延遲1000毫秒,並查看客戶端時間是否已經改變了一個與1000毫秒有顯着不同的數量。如果有,您需要重新與服務器同步。

例如,

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功能,但你並不需要。

相關問題