PHP时差每小时在现场进行一次比赛


PHP time diffrence hourly competetion on site

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

应用程序有一个jquery倒计时计时器,该计时器为当前比赛剩余倒计时时间。比赛是以小时为基础的,Gloabal(我在这里说Global是为了表明每个人的比赛都将在同一时间结束——需要服务器时间)

以下是我使用的逻辑:

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

然后,当用户要去应用程序时,我调用一个函数,它会得到比赛结束时间和当前时间。然后得到这个时间和剩余时间的差值,我将在java脚本中放入count 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;");
}

有人知道时差为什么是负数吗?有什么建议用不同的方式来完成这项任务吗?我必须使用代码点火器日期帮助等吗?

以下是我要更改的一些内容:

$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);

注意到date()格式中的H而不是g吗?这是因为如果你使用一个24小时的时钟,以零开头,时间更容易比较。