我将卡片过期信息传递给我:
$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之前或之后的任何想法?
答案 0 :(得分: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
}