创建与区域相关的时钟

时间:2013-09-04 09:58:52

标签: php javascript jquery datetime

我的本​​地服务器和浏览器(本地系统)都有工作时钟。两者都很棒。 现在我要做的是根据秒数找到时钟之间的时间偏移量,并将其添加到本地系统时钟。

例如:我的系统时钟是:10:00:00,服务器时钟是同一天的12:15:00。 那么偏移将是:02:15:00(当然它将在几秒钟内,但仅仅是我用这种方式编写的例子)。然后将其添加到(浏览器)本地时间,以便最终显示服务器时间。 12时15分零零秒。

这就是我在这里做的事情:

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兼容性存在问题。 知道怎么解决吗? 谢谢

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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。