2012-08-23 24 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小時時鐘,時間比較容易。