PHP - 将日期与字符串进行比较,而不考虑时区


PHP - Compare date to string regardless of timezone

我有一个卡到期信息传递给我:

$date = '2014-12-22';
$hour = '19';
$minute = '30';

我需要弄清楚是否可以根据门位置的当前日期和时间授予访问权限,每个日期和时间都位于不同的时区。 检查这一点的脚本每小时生成一次,并分发给访问服务器,这些服务器需要推断门的本地时间是否在到期时间之前(整个设计相当复杂且设计相当糟糕)。

我需要将下面的$door_datetime与卡到期信息(日期,小时,分钟)进行比较

$door_datetime = new DateTime;
$door_datetime->setTimezone(new DateTimeZone($door_timezone));

另一个问题是数据库数据没有被主动清理,并且有数百万个卡到期日期,小时,分钟与$door_datetime进行比较;正如您可以想象的那样,在繁忙的时间,随着服务器速度变慢,这成为一个问题。

关于如何有效地找出 $door_datetime 是在$date、$hour$time之前还是之后的任何想法?

DateTime 对象是可比的,所以它应该像这样简单:

$now = new DateTime(null, new DateTimeZone($door_timezone));
$card_expires = new DateTime(sprintf('%s %s:%s:00', $date, $hour, $minute), new DateTimeZone($door_timezone));
if ($card_expires <  $now) {
    // expired
}