0

我的本地服务器和浏览器(本地系统)有一个工作时钟。两者都很好用。现在我要做的是找到时钟之间的时间偏移,基于秒,并将其添加到本地系统时钟。

例如:我的系统时钟是:10:00:00,服务器时钟是同一天的 12:15:00。那么偏移量将是:02:15:00(当然它会以秒为单位,但只是对于我这样写的示例)。然后将其添加到(浏览器)本地时间,以便我最终显示服务器时间。12:15:00。

这就是我在这里所做的:

var interval = self.setInterval(function(){
  clock();
},1000);

function clock()
{   
    //Get local server time
    <?php $today = getdate(); ?>;
    var ser = <?php echo $today[0]; ?>;

    //Local client time
    var seconds = Date.now();
    var offset = seconds-ser*1000;
    parseInt(offset/1000);

    var d = new Date();
    d.setTime(Date.now()-offset);
    var h = d.getHours();
    var m = d.getMinutes();
    var s = d.getSeconds();

    if(s < 10)
      s = "0" + s;
    if(m < 10)
      m = "0" + m;
    if(h < 10)
      h = "0" + h;

    var tm = h+":"+m+":"+s;
    document.getElementById("clock").value = tm;
} 

但只要我把变量

offset

在这一行:d.setTime(Date.now()-offset);

时钟不再更新。我猜PHP兼容性存在问题。知道如何解决吗?谢谢

4

2 回答 2

1

偏移量计算必须在重复调用的函数之外:

//Get local server time
<?php $today = getdate(); ?>;
var ser = <?php echo $today[0]; ?>;

//Local client time
var seconds = Date.now();
var offset = seconds-ser*1000;
parseInt(offset/1000); // BY THE WAY: As the returnval of parseInt isn't stored anywhere, this line does nothing

var interval = self.setInterval(function(){
  clock();
},1000);

function clock()
{   

    var d = new Date();
    d.setTime(Date.now()-offset);
    var h = d.getHours();
    var m = d.getMinutes();
    var s = d.getSeconds();

    if(s < 10)
      s = "0" + s;
    if(m < 10)
      m = "0" + m;
    if(h < 10)
      h = "0" + h;

    var tm = h+":"+m+":"+s;
    document.getElementById("clock").value = tm;
}
于 2013-09-04T10:38:26.193 回答
1

也许你错过了“parseInt”的一些东西?

parseInt 需要一个变量来存储值。

所以,如果你写:

var offset = seconds-ser*1000;
    parseInt(offset/1000);

就像你写:

var offset = seconds-ser*1000;

所以,替换:

    var offset = seconds-ser*1000;
    parseInt(offset/1000);

有了这个:

var offset = seconds-ser*1000;
offset = parseInt(offset/1000);

在我的浏览器上尝试过并且可以工作。

整个脚本应该是这样的(我使用了 console.log 代替):

var interval = self.setInterval(function(){
              clock();
            },1000);

            function clock()
            {   
                //Get local server time
                <?php $today = getdate(); ?>;
                var ser = new Date(<?php echo $today[0]; ?>);
                var seconds = Date.now();
                var offset = seconds-ser*1000;
                offset = parseInt(offset/1000);

                //Local client time


                var d = new Date();
                d.setTime(Date.now()-offset);
                var h = d.getHours();
                var m = d.getMinutes();
                var s = d.getSeconds();

                if(s < 10)
                  s = "0" + s;
                if(m < 10)
                  m = "0" + m;
                if(h < 10)
                  h = "0" + h;

                var tm = h+":"+m+":"+s;
                console.log(tm);
            } 

只需在需要解析的地方解析你的 console.log。

于 2013-09-04T10:39:32.547 回答