2014-12-23 3 views
0

У меня есть истечения срока действия карты информация передается мне, как:PHP - сравнение даты в строку, независимо от часового пояса

$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?

ответ

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 
} 
+0

Спасибо, что работали. Я предполагаю, что объекты DateTime довольно легки, когда дело доходит до ресурсов сервера. – Kate

+0

Странно, я не мог заставить его работать. Должно быть, я; * Да, это я *. lol уверен, что это работает, хотя Джон ;-) просто получаю исключение. –

+0

Я тоже сейчас, когда я его тестирую. Но я не вижу ошибки. –

Смежные вопросы