2012-08-23 78 views
2

我正在使用codeigniter在php中的一个小应用程序。PHP时间差分每小时在网站上竞争

应用程序有一个jquery倒数计时器,当前比赛剩下的倒计时时间。竞争是每小时基础,Gloabal(我所说的全球表明,为大家比赛将在同一时间完成 - 以服务器时间)

这里是我使用的逻辑:

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

然后,当用户要去应用程序时,我正在调用一个获取比赛结束时间和当前时间的功能。然后得到这个时间和时间的差异剩下我放在Java脚本计数downer显示时间离开。

现在的问题:

寄托都在工作,除了当时间是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日期帮助等?

+1

有什么特别的原因,你没有使用CI的数据库类? –

+0

我更新时间从普通的PHP文件...因为使用cron – Jadzia

+0

在mysql中comp_end_time的数据类型是什么? –

回答

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而不是gdate()格式?那是因为如果你使用带有前导零的24小时时钟,时间比较容易。