如何每秒获取服务器时间

时间:2011-04-29 04:21:36

标签: javascript

我的问题是仅显示客户端时间,但希望每秒显示服务器时间。

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);
}
}

4 个答案:

答案 0 :(得分:3)

如果你想避免所有网络流量每秒检查服务器的时间:(1)让服务器以你在页面加载时存储在JS变量中的方式传递时间; (2)还将客户端时间存储为页面加载; (3)使用setInterval通过将当前客户端时间减去页面加载时的客户端时间作为页面加载时服务器时间的偏移量来更新时间(每1000毫秒或根据需要更新)。 (显然如果用户在你的页面运行时更新他们的PC时钟会出错,但有多少用户会这样做?如果他们这样做,它会成为世界末日吗?)

如果你真的想要每秒实际的服务器时间 - 为什么?如果有任何好处,似乎有点浪费带宽,但如果你必须这样做,就像使用Ajax一样。如果您不熟悉Ajax,我建议您使用Google查找一些教程 - 如果您使用JQuery,则只需几行代码即可完成。容易。

或者将您的屏幕时钟放在重复加载的IFRAME中。仅仅因为我有时会错过IFRAME的日子。

答案 1 :(得分:3)

如果您遇到服务器时间与客户端时钟不同的问题,我只需几分钟查找一次服务器时间增量,然后将其添加到新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;
    }

答案 2 :(得分:0)

您需要服务器在页面加载或XMLHttpRequest上为JavaScript提供时间。

答案 3 :(得分:0)

要在javascript中从客户端获取服务器时间,您需要进行ajax调用。 你知道如何打这种电话吗?

您基本上会创建另一个显示/返回时间的页面(或Web方法等)。然后,您将使用XMLHttpRequest对象进行调用并获得结果。