0

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

$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 之前还是之后的任何想法?

4

1 回答 1

1

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
}
于 2014-12-23T00:52:46.353 回答