检查时区是否已经过了一段时间

时间:2016-08-03 19:05:14

标签: php datetime

我在确定如何验证某个时区是否已经过了某个时间(当前为时区)时遇到了一些麻烦。

例如,如果伦敦的时间已经过了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,在撰写本文时尚未过去。

知道如何做到这一点?

谢谢,

2 个答案:

答案 0 :(得分:0)

我认为这应该有效:

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

左侧是一个字符串,每个组件都包含前导零,因此您可以直接与右侧进行字符串比较。

(这假设您认为第二天的午夜没有“通过”18:00:00。)

答案 1 :(得分: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";
}