在我的服务器上,数据库服务器时间和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);
答案 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);