2016-08-03 4 views
0

タイムゾーンが特定の時間(タイムゾーンのローカル)を過ぎたかどうかを確認する方法を調べるのに少し問題があります。タイムゾーンが特定の時間を過ぎているかどうかを確認してください

ロンドンでの時間は午後6時00分○○秒

$tz = new DateTimeZone('Europe/London'); 
$datetime1->setTimezone($tz); // calculates with new TZ now 

if ($datetime1->format('H:i:s') >= strtotime('18:00:00')) { 

    echo "time has passed"; 
} else { 
    echo "time has NOT passed"; 
} 

に合格しているのであれば、たとえば、これに伴う問題は、のstrtotime('18:00:00' )ということで、サーバーの時間を使っているように見えます。 私がstrtotimeをエコーし​​た場合('18:00:00 '); 1970年以降の秒数である1470247200が返されますが、これは別のタイムゾーンの午後6時ではなくなります。これは、これを書いた時点で渡されていないAmerica/New_Yorkです。

どのようにこれを行うことができますか?

おかげで、

+0

答えを得ましたか?はいの場合は、正解をマークしてください。 –

答えて

0

私は、これは動作するはずだと思う:

if ($datetime1->format('H:i:s') >= '18:00:00') { 

は左側が文字列で、すべてのコンポーネントが先行ゼロが含まれているので、あなただけの右側の文字列の比較を行うことができます。

(これはあなたが持っていないために次の日の真夜中を検討することを前提として午後6時00分00秒「合格」。)

0

それが含まれているため使用DateTime自身の比較機能のタイムゾーンのサポート:

$tz = new DateTimeZone('Europe/London'); 
$datetime1->setTimezone($tz); // calculates with new TZ now 

$datetime2 = new \DateTime('18:00:00', $tz); 

if ($datetime1 >= sdatetime2) {  
    echo "time has passed"; 
} else { 
    echo "time has NOT passed"; 
} 
関連する問題