仪表板中的时钟随着系统时间的变化而变化

时间:2011-08-31 12:06:51

标签: java javascript datetime

我的要求是,显示器中的时钟不应该随着我改变系统的客户端时间而改变。 我有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;


         } 
      });
  }

请帮助..我在哪里做错了,有没有更好的办法呢?

如何防止dashbord使用终端时钟并仅使用服务器时钟

2 个答案:

答案 0 :(得分:0)

如果您将其作为客户端时钟的基础,那么当用户更改时钟时它会因参考点更改而中断。

如何检测用户何时更改?

跟踪更新显示屏时的上一次。如果前一时间显着不同,您可以通过millDiff重新调整。

注意:由于请求通过网络传输所需的时间以及页面所需的时间,时间从不准确无误在客户端上呈现。

答案 1 :(得分:0)

只要您使用任何代码,例如

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

您需要某种方式来更新服务器和客户端之间的时差。一种解决方案是使用window.setInterval,例如1000ms延迟,并查看客户端时间是否已经改变了与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函数中,但不需要。