我正在使用 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 日期帮助等?