如何将php或客户端时间与MySQL时间同步?

时间:2014-02-11 10:25:50

标签: javascript php mysql cakephp

在我的服务器上,数据库服务器时间和php时间之间存在差异,我需要将它们同步到我的(CakePHP)应用程序。我有一个带有时间戳的数据库登录,我需要从那一刻开始显示一个jQuery计数器。当我将其保留为默认值时,它从1:03:58而不是0:00:00开始。这样做的方法是什么?

这是计数器代码,php $计数器变量包含数据库时间戳int值。

$('#counter').countdown({since: <?php echo $counter?>, format: 'HMS', compact: true});

这是我用于计数器的jquery插件: http://keith-wood.name/countdown.html

这是$ counter获取值的位置(它是时间戳的数据库查询):

public function getCounter ($task_id, $user_id) {
    $output = false;
    if($this->User->UserLog->hasAny(array(  
        'user_id' => $user_id,
        'task_id' => $task_id,
        'end_time' => null,
    ))) {
        $output = $this->User->UserLog->field('start_time', array(
            'user_id' => $user_id,
            'task_id' => $task_id,
            'end_time' => null,
        ));
        $output = strtotime($output);   
    }
    return $output;
}

然后只是$counter = $this->Task->getCounter ($task_id, $user_id);

2 个答案:

答案 0 :(得分:1)

我认为问题在于,当您传递Unix时间戳时,您的jQuery插件需要一个JavaScript Date对象

尝试类似:

PHP

$counter = $counter*1000; //javascript expects milliseconds

的JavaScript

$('#counter').countdown(
{
    since: new Date(<?php echo $counter?>), 
    format: 'HMS', 
    compact: true
 });

编辑: 如果您的客户端与您的服务器不同步,您的插件可让您同步这两个。

查看倒计时插件中的时区部分。

你必须构建一个JS函数,使用ajax检索实际的服务器时间,并将函数名称传递给插件构造函数。

function serverTime() { 
    var time = null; 
    $.ajax({url: 'http://myserver.com/serverTime.php', 
        async: false, dataType: 'text', 
        success: function(text) { 
            time = new Date(text); 
        }, error: function(http, message, exc) { 
            time = new Date(); 
    }}); 
    return time; 
}

答案 1 :(得分:0)

倒计时js使用客户端系统日期显示剩余时间。因此,根据服务器当前时间更改倒计时js以进行检查。通过硬编码来做。

我已经完成了以下工作并为我工作。

    // serverdate_js is server current time for javascript in 'Y-m-d H:i:s' format
    var date_split = serverdate_js.split(' ');
    var date = date_split[0];
    var time = date_split[1];
    var date_arr = date.split('-');
    var time_arr = time.split(':');
    var curdate_time = new Date(date_arr[0]+" "+date_arr[1]+","+date_arr[2]+" "+time_arr[0]+":"+time_arr[1]+":"+time_arr[2]);

  var $this = $(this),
      values = {},
      lasting = {},
      interval = $this.data('countdownInterval'),
      currentDate = curdate_time,
      secondsLeft = Math.floor((toDate.valueOf() - currentDate.valueOf()) / 1000);