2

我正在使用 codeigniter 在 php 中开发一个小应用程序。

应用程序有一个 jquery 倒数计时器,倒计时时间留给当前比赛。比赛是基于每小时和全球的(我在这里说全球是为了表明每个人的比赛都将在同一时间结束 - 占用服务器时间)

这是我正在使用的逻辑:

由于比赛是每小时一次,一天将进行 24 场比赛。所以我正在做的是:我在数据库中创建了一个时间戳字段,并使用 cron 作业每小时更新(当前时间戳 + 1 小时)。这个时间是比赛的结束时间。

然后,当用户要去应用程序时,我正在调用一个获取比赛结束时间和当前时间的函数。然后得到这个时间和剩余时间的差异,我正在输入java脚本计数以显示剩余时间。

现在问题:

一切正常,除非时间为 12 比 1。计数器总是显示负时间。意味着时间差异将变为负数。

我尝试了什么:

我试着把

       date_default_timezone_set('Europe/London');

但没有运气!

这是我的代码:

$query="SELECT comp_end_time FROM competetions WHERE comp_type=1 ORDER BY comp_id DESC LIMIT 1";
$sql=mysql_query($query);
$row=mysql_fetch_array($sql);
date_default_timezone_set('Europe/London');
$end_time=strtotime($row['comp_end_time']);
$now=date("Y-m-d g:i:s");
$current_time=strtotime($now);
$time_diff=$end_time-$current_time;


$minutes=floor($time_diff / 60);
$sec = $time_diff - ($minutes * 60);
$minutes=(strlen($minutes) == 1) ? '0'.$minutes: $minutes;
$sec=(strlen($sec) == 1) ? '0'.$sec: $sec;

$min1=substr($minutes, 0, 1);
$min2=substr($minutes, 1, 2);
$sec1=substr($sec, 0, 1);
$sec2=substr($sec, 1, 2);

$data=array(
       'min1'=>$min1,
       'min2'=>$min2,
       'sec1'=>$sec1,
       'sec2'=>$sec2
       );
return $data;
}

这是使用 cron 更新时间的代码:

function update_timer(){
date_default_timezone_set('Europe/London');
$now=date("Y-m-d g:i:s");
$currentTime=strtotime($now);
$timeAfterOneHour=$currentTime+60*60;
$new_hr=date("Y-m-d g:i:s",$timeAfterOneHour);
echo date("Y-m-d g:i:s",$currentTime).'<br>';
echo $new_hr;
mysql_query("UPDATE  `zaggora1_hotpant`.`competetions` SET  `comp_end_time` =  '$new_hr' WHERE  `competetions`.`comp_id` =1;");
}

有人知道为什么时差会变成负数吗?任何建议使用一些不同的方式来完成这项任务?我是否必须使用 codeigniter 日期帮助等?

4

1 回答 1

0

以下是我要改变的几件事:

$now=date("Y-m-d g:i:s");
$current_time=strtotime($now);

这可以简化为:

$current_time = time();

对于您的 cron 脚本:

$now=date("Y-m-d g:i:s");
$currentTime=strtotime($now);
$timeAfterOneHour=$currentTime+60*60;
$new_hr=date("Y-m-d g:i:s",$timeAfterOneHour);

可以改为:

$currentTime = time();
$timeAfterOneHour=$currentTime+60*60;
$new_hr=date("Y-m-d H:i:s",$timeAfterOneHour);

注意格式中的H而不是?那是因为如果您使用带有前导零的 24 小时制时钟,则更容易比较时间。gdate()

于 2012-08-24T04:36:36.700 回答