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

Clock in dashboard changes as the system time is changed

本文关键字:改变 时间 系统 时钟 仪表板      更新时间:2023-09-26

我的要求是,当我改变系统的客户端时间时,显示器中的时钟不应该改变。我有jboss服务器..有仪表板应该显示服务器时间..我已经做了一些编码,但当我改变我的系统定时时钟也改变在仪表板..这里是我的代码..

从类我得到服务器时间

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;

         } 
      });
  }
我哪里做错了,有没有更好的方法?

如何防止仪表板使用终端时钟而只使用服务器时钟

如果您基于客户端时钟,则由于参考点更改,当用户更改时钟时,它将中断。

如何检测用户更改它?

更新显示时,请记录以前的时间。如果之前的时间有明显差异,可以通过millDiff .

重新调整。

注意:时间是永远不会将是准确的,因为它需要的时间为请求在网络上旅行和它需要的时间页面呈现在客户端。

只要你使用任何类似

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

需要某种方式来更新服务器和客户机之间的时差。一个解决方案是使用窗口。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函数中,但您不需要这样做。