2012-04-01 8 views
0

残っている時間の表示にいくつか問題があります。PHP時間残しエラー

これは私のコードです:

echo date("H:i:s", $show_job['deadline'] - time()); 

私のサーバーのタイムゾーンは次のとおりです。ヨーロッパ/アムステルダム

これは、データベースに行く時間があるものである:

$currentTimestamp = time(); 
$in24hourstime = strtotime("+24 hours", $currentTimestamp); 

問題私のユーザーの中には、例えば24時間ではなく10時間を取得している人もいるということです。私の推測では、これらのユーザーは異なるタイムゾーンから来ています。私はロンドンにいます。

このエラーの原因は何ですか?ありがとうございました。良いアイデアは、明示的にそうようにPHPの日付関数を使用してスクリプトのデフォルトのタイムゾーンを設定するには、まずその

+0

Offtopic:なぜ「+1日」ではないですか? +24時間は、夏/冬の時間をサポートするタイムゾーンで問題を引き起こします。 – Basti

+0

私はそれがエラーであるとは思わない。私はこのコードを別の場所で2分使用し、一部のプレイヤーは11時間2分を取得しています。私はこれを試してみます、ありがとう。 –

+0

'$ in24hourstime = $ currentTimestamp + 86400;' – kijin

答えて

1

date_default_timezone_set('Europe/London'); 

これは、すべての日付の計算が正しい内部タイムゾーンを使用して確実にhttp://php.net/manual/en/function.date-default-timezone-set.php

を参照してください。ユーザーに日付を表​​示すると、それに応じてタイムゾーンに合わせて時刻を調整することができます。私たちは私たち秒の違いを与えるために、他のから1を引くことができ差異を計算するには

$now = time(); 
$in24hourstime = strtotime("+24 hours", $now); 

:あなたの例を変更する

はわずかになりましたし、24時間でのUNIXタイムスタンプを持つ2つの変数を作成することができます

$remaining = $in24hourstime - $now;  

この例では、$ remainingの値は86400秒です。この値が0か負の数であれば、期限が過ぎたと見なすことができます。

参照:さておき、あなたが(私の意見では、それは多くの利点を提供して作り付けの時間をかけて便利なPHPのDateTimeクラスを使用して見つける。)と日付()することができ、タイムゾーンに対処するための簡単な方法として

if($remaining > 0) { 

    $hours = intval(intval($remaining)/3600); 
    $minutes = intval(($remaining/60) % 60); 
    $seconds = intval($remaining % 60); 

    echo $hours . ' hours, '.$minutes.' minutes and '.$seconds . ' seconds remaining!'; 

} else { 

    echo "Deadline has been met. No time remaining!"; 
} 

http://php.net/manual/en/book.datetime.php

+0

タイムゾーンは実際にはサーバーの既定のタイムゾーンです。私は実際にあなたと似たような方法を使ってきましたが、それはこれまで働いていたようです。それがなければ私はあなたのものを使用しますが、それはあなたの答えです! –