Сравните дату со строкой независимо от часового пояса

У меня есть информация об истечении срока действия карты:

$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

Решение

Объекты 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
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]