У меня есть информация об истечении срока действия карты:
$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
}
Других решений пока нет …