2016-08-03 7 views
0

Ich habe ein wenig Mühe herauszufinden, ob eine Zeitzone eine bestimmte Zeit (lokal in der Zeitzone) überschritten hat.Überprüfen Sie, ob eine Zeitzone eine bestimmte Zeit überschritten hat

So zum Beispiel, wenn die Zeit in London bestanden hat 18:00: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"; 
} 

Das Problem dabei ist, dass strtotime ('18: 00: 00') scheint die Serverzeit zu verwenden . Wenn ich strtotime Echo ('18: 00: 00 '); wird 1470247200 zurückgeben, was die Anzahl der Sekunden seit 1970 ist, aber dies ist nicht die 18:00 Uhr Zeit für eine andere Zeitzone, zum Beispiel America/New_York, die zum Zeitpunkt des Schreibens noch nicht vergangen ist.

Irgendeine Idee, wie dies getan werden kann?

Danke,

+0

Haben Sie die Antwort bekommen? Wenn ja, markieren Sie die richtige Antwort. –

Antwort

0

ich denke, das sollte funktionieren:

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

Die linke Seite ist eine Zeichenfolge, und jede Komponente enthält führende Nullen, so dass Sie nur einen String-Vergleich mit der rechten Seite tun können.

(Dies setzt voraus, dass Sie Mitternacht des nächsten Tages berücksichtigen nicht haben „bestanden“ 18.00.00.)

0

Verwenden DateTime der eigene Vergleichsfunktion, da sie die Zeitzone Unterstützung umfassen:

$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"; 
}