【问题标题】:Creating a zone related clock创建区域相关时钟
【发布时间】:2013-09-07 18:45:59
【问题描述】:

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

例如:我的系统时钟是: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兼容性存在问题。 知道如何解决吗? 谢谢

【问题讨论】:

    标签: php javascript jquery datetime


    【解决方案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。

    【讨论】:

    • 如果我这样做:offset = parseInt(offset/1000);那么时钟正在工作,但如果我这样做:offset = parseInt(offset);时钟停止。
    • 也许 parseInt(offset) 不除以 1000 太大而不能减去日期?问题是什么?您需要除以偏移量还是除以偏移量/1000?
    • 这确实是问题所在,但是一旦我将代码放在函数之外,它就开始工作并且数学操作是必要的,因为 getdate() 以毫秒为单位返回,而 Date.Now() 以秒为单位返回.这就是我这样做的原因。无论如何,对不起,如果我不清楚并感谢您的帮助。
    【解决方案2】:

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

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

    【讨论】:

    • 是的,它确实假设在函数之外。现在时钟再次滴答作响。正如您和@briosheje 指出的那样, parseInt() 存储是一个愚蠢的错误。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多