javascript 如何获得服务器时间每秒钟

a14dhokn  于 2023-06-28  发布在  Java
关注(0)|答案(5)|浏览(162)

我的问题是只显示客户端时间,但要显示服务器的时间每秒钟.

function GetCount(ddate,iid){

var date = new Date();
dateNow = date;

// if time is already past
if(amount < 0){

}
// else date is still good
else{
    days=0;hours=0;mins=0;secs=0;out="";

    amount = Math.floor(amount/1000);//kill the "milliseconds" so just secs

    days=Math.floor(amount/86400);//days
    amount=amount%86400;

    hours=Math.floor(amount/3600);//hours
    amount=amount%3600;

    mins=Math.floor(amount/60);//minutes
    amount=amount%60;

    secs=Math.floor(amount);//seconds

    document.getElementById(iid).innerHTML=days;
    document.getElementById('countbox1').innerHTML=hours;
    document.getElementById('countbox2').innerHTML=mins;
    document.getElementById('countbox3').innerHTML=secs;

    setTimeout(function(){GetCount(ddate,iid)}, 1000);
}
}
gg58donl

gg58donl1#

您需要服务器在页面加载时或通过XMLHttpRequest向JavaScript提供时间。

hzbexzde

hzbexzde2#

要在JavaScript中从客户端获取服务器时间,您需要进行 AJAX 调用。你知道怎么打这种电话吗?
你基本上会做另一个页面(或web方法等),显示/返回时间。然后使用XMLHttpRequest对象进行调用并获取结果。

noj0wjuj

noj0wjuj4#

如果你想避免所有的网络流量检查时间与服务器每一秒只是:(1)让服务器以页面加载时存储在JS变量中的方式来传递时间;(2)还存储页面加载时的客户机时间;(3)使用setInterval更新时间(每1000毫秒或根据您的需要),方法是获取当前客户端时间减去页面加载时的客户端时间,作为页面加载时的服务器时间的偏移量。(显然,如果用户在页面运行时更新PC时钟,这一切都会出错,但有多少用户会这样做呢?如果他们这样做了,那会是世界末日吗?)
如果你真的想要每一秒的实际服务器时间-为什么?这似乎有点浪费带宽,但如果您必须这样做,请按照前面的建议使用Ajax。如果你不熟悉Ajax,我建议你使用Google查找一些教程--如果你使用JQuery,你只需要几行代码就可以做到。别激动
或者把你的屏幕时钟放在一个IFRAME里,它会反复地重新加载自己。只是因为我有时怀念IFRAME的日子。

qco9c6ql

qco9c6ql5#

如果您遇到服务器时间与客户端时钟不同的问题,我只查找一次以分钟为单位的服务器时间增量,然后将其添加到新Date()的分钟:

var refDateTime = new Date();
    refDateTime.setMinutes(refDateTime.getMinutes() + getServerTimeDelta());
    // ...
    var serverTimeDelta;
    function getServerTimeDelta(recalc) {
       var xmlHttp;
       if (recalc || !serverTimeDelta) {
          try {
             if (window.XMLHttpRequest) {
                xmlHttp = new XMLHttpRequest();
             } else {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
             }
          } catch(err1) {
             //IE
             try {
                xmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
             } catch(err2) { /* swallow it */ }
          }
          if (xmlHttp) {
             xmlHttp.open('HEAD', window.location.href.toString(), false);
             xmlHttp.setRequestHeader("Content-Type", "text/html");
             xmlHttp.send('');
             var serverDateTime = xmlHttp.getResponseHeader("Date");
             if (serverDateTime) {
                 var dateNow = new Date();
                 var serverDate = new Date(serverDateTime);
                 var delta = serverDate.getTime() - dateNow.getTime();
                 // Convert to minutes
                 serverTimeDelta = parseInt((delta / 60000) + ''); 
                 if (!serverTimeDelta) serverTimeDelta = 0.01; 
              } else {
                 serverTimeDelta = 0.011; // avoid auto recalc
              }
          } else {
             serverTimeDelta = 0.012;
          }
       }
       return serverTimeDelta;
    }

相关问题