【问题标题】:Get the difference between a server side time and client side time and display it [duplicate]获取服务器端时间和客户端时间之间的差异并显示它[重复]
【发布时间】:2012-06-19 20:47:56
【问题描述】:

可能重复:
How to sync a javascript countdown with server time

我怎样才能计算服务器端时间和客户端时间之间的差异,然后在我的视图中显示它,这是一个 PHP 页面。

让我说清楚一点。我有一个存储在数据库中的特定板球比赛开始的时间数据。现在,我想在我的视图中显示这个时间和客户端浏览器中的时间之间的差异,这是一个 PHP 页面。我可以理解我需要为此编写一个 javascript 函数,但是如何从我的 PHP 代码中调用此函数,并且我必须再次在我的视图中显示差异。

我对此感到困惑。

【问题讨论】:

    标签: javascript timezone


    【解决方案1】:

    date.js 对于日期计算非常方便,可以解析/显示各种格式的日期。

    【讨论】:

      【解决方案2】:

      在 php 中将您的日期写入页面上的隐藏输入。以如下格式存储它:YYYY/MM/DD hh:mm:ss。通过将隐藏字段的值传递给 Date 构造函数来加载该日期:

      var cricketDateField = document.getElementsById("cricketDateField");
      var cricketDate = new Date(cricketDateField.value);
      

      只需调用不带参数的 Date 构造函数即可获取当前日期:

      var now = new Date();
      

      通过减去日期得到以毫秒为单位的差异:

      var msDiff = cricketDate - now;  // difference in milliseconds
      

      然后您可以手动解析毫秒,或转换为日期并提取日期的部分以获取差异:

      var diff = new Date(msDiff - 62167190400000);  // difference as a date
      var years = diff.getYear();
      var months = diff.getMonth();
      var days = diff.getDate() - 1;
      var hours = diff.getHours();
      var minutes = diff.getMinutes();
      var seconds = diff.getSeconds();
      var msg = "There are " + years + " years, " +
                               months + " months, " +
                               days + " days, " +
                               hours + " hours, " +
                               minutes + " minutes, and " +
                               seconds + " seconds until the cricket match.";
      document.getElementById("differenceMsg").innerHTML = msg;
      

      【讨论】:

        【解决方案3】:

        我不知道这是否是正确的方法..但你可以做的是

        var mytime=new Date();
        var serverTime = new Date('<?php echo date('Y/m/d H:i:s')?>');
        var difference  = (mytime - serverTime)/1000;
        var url = 'setSessionData.php';
        $.post(url,'dateDiff='+difference);
        

        在 setSessionData 中只使用该值并设置会话 .. 并在显示详细信息时获取匹配时间

        date('Y-m-d H:i:s',strtotime('+ '.$_SESSION['date_difference'].' sec', $matchTime));
        

        使用 mktime() 计算 $matchTime

        【讨论】:

          【解决方案4】:

          从 javascript 发送 (new Date()).getTime() 到 php 脚本,并使用 php 中的 time() 函数。

          $difference = time() - (int)$_GET['clientTime'];
          

          这应该准确到客户端与您的服务器通信的时间。

          【讨论】:

            猜你喜欢
            • 2016-05-12
            • 1970-01-01
            • 2011-04-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-03
            相关资源
            最近更新 更多