2

私は、codeigniter を使用して php で小さなアプリに取り組んでいます。

アプリには、現在の競争のために残されたカウントダウン時間のjqueryカウントダウンタイマーがあります。競争は時間ベースであり、グローバルです(すべての競争が同時に終了することを示すために、ここでグローバルと言っています-サーバー時間がかかります)

ここに私が使用しているロジックがあります:

競技は毎時間行われ、1 日で 24 競技となります。だから私がやっていることは次のとおりです。データベースにタイムスタンプフィールドを作成し、cronジョブを使用して1時間ごとに(現在のタイムスタンプ+ 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 date Helped などを使用する必要がありますか?

4

1 に答える 1

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の代わりにgフォーマットdate()に注意してください。これは、先頭にゼロを付けた 24 時間時計を使用すると、時間を比較しやすくなるためです。

于 2012-08-24T04:36:36.700 に答える