我正在使用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日期幫助等?
有什麼特別的原因,你沒有使用CI的數據庫類? –
我更新時間從普通的PHP文件...因爲使用cron – Jadzia
在mysql中comp_end_time的數據類型是什麼? –