【问题标题】:Issue with synchronization server time on client JSP page客户端 JSP 页面上的同步服务器时间问题
【发布时间】:2014-08-20 14:53:36
【问题描述】:

在 JSP 页面上,我需要显示带有服务器时间的时钟。 我试过以下代码:

function startTime() {
    var timeServer = ('<%= new Date().getTime()%>');
    var timeLocal=new Date();
    var millDiff = timeServer - timeLocal;
    timeLocal.setMilliseconds(timeLocal.getMilliseconds() - millDiff);
    document.getElementById('txt').innerHTML = timeLocal;
    var t = setTimeout(function(){startTime()},500);
}

但页面显示我本地机器的时钟。

【问题讨论】:

  • 你知道服务器的时区吗?

标签: java javascript jsp datetime client-server


【解决方案1】:

您的 Javascript 方法只会在第一次调用时起作用。之后,由于timeServer 是硬编码的(就客户端而言),您的millDiff 在随后对startTime() 的调用中将出错。就客户端而言,timeServer 的值是硬编码的,因为 JSP 脚本不会在客户端再次运行,因此每次调用 Javascript 函数时,&lt;%= new Date().getTime()%&gt; 的值都保持不变,从而导致随着时间的推移,timeServer 和当前客户端时间之间的差异会更大。

您应该将millDiff 设为全局变量,并且您的millDiff 应该始终是JSP 运行时间与Javascript 函数首次 执行时间之间的毫秒差值。你不应该每次都重置它。

var m_millDiff = 0;
function startTime() {
    var timeServer = ('<%= new Date().getTime()%>');
    var timeLocal=new Date();
    if(m_millDiff==0)
    {
      m_millDiff = timeServer - timeLocal;
    }
    timeLocal.setMilliseconds(timeLocal.getMilliseconds() - m_millDiff);
    document.getElementById('txt').innerHTML = timeLocal;
    var t = setTimeout(function(){startTime()},500);
}

反正就是这样。代码可能仍然不完美,但这是基本问题。

【讨论】:

    【解决方案2】:

    您可以使用以下代码来做到这一点

    在你想显示服务器时间的地方添加一个标签

    <strong>Server Time&nbsp;:&nbsp;&nbsp;</strong><label id="timelable"></label>
    

    然后在body标签里面的jsp末尾添加如下java脚本代码

    <script type="text/javascript">
            var myVar = setInterval(function(){ myTimer() }, 1000);
            var jsVar=  <%=java.util.Calendar.getInstance().getTimeInMillis()%>;
            var timeZoneOffset=<%=java.util.TimeZone.getDefault().getOffset(System.currentTimeMillis())%>;
    
            jsVar=jsVar+timeZoneOffset;
            function myTimer() {
            jsVar=jsVar+1000;
            var d = new Date(jsVar);
            var t=d.toUTCString();
        document.getElementById("timelable").innerHTML = t;
    }
    
            </script>
    

    现在就是这样,您将看到在您的 jsp 中运行的服务器时间。

    【讨论】:

      猜你喜欢
      • 2013-11-16
      • 2021-08-13
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      相关资源
      最近更新 更多