2016-08-03 3 views
0

У меня возникли проблемы с тем, как проверить, прошел ли часовой пояс определенное время (локально для часового пояса).Проверьте, прошел ли часовой пояс определенное время

Так, например, если время в Лондоне прошел 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"; 
} 

Проблема с этим состоит в том, что StrToTime ('18: 00: 00'), похоже, использует сервер времени , Если я эхо strtotime ('18: 00: 00 '); вернет 1470247200, что составляет количество секунд с 1970 года, но это не будет 6 вечера для другого часового пояса, например America/New_York, который на момент написания этого не прошел.

Любая идея, как это можно сделать?

Спасибо,

+0

Вы получили ответ? Если Да, обязательно отметьте правильный ответ. –

ответ

0

Я думаю, что это должно работать:

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

Левая сторона представляет собой строку, и каждый компонент содержит ведущие нули, так что вы можете просто сделать сравнение строк с правой стороны.

(Это предполагает, что вы считаете полночь следующего дня, чтобы не «прошел» 18:00:00.)

0

Использование DateTime «s собственная функция сравнения, так как она включает в себя поддержку часовой пояс:

$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"; 
} 
Смежные вопросы