я должен послать электронное письмо, когда пользователь регистрирует электронную почту, содержащую ссылку, которая стала недействительной через шесть часов, что они делают при отправке электронной почты. Я обновляю db с полем emailSentDate типа «datetime», теперь я получил текущую дату и время и сделанный с тем же форматом, что и в db, теперь я хочу найти, что обе эти даты и время имеют разницу в 6 часов или нет, поэтому я могу сделать ссылку недействительной, но я не знаю, как это сделать
мой код выглядит так: im, используя hardcoded значение для db, например
$current_date_time=date("Ymd h:i:s"); $current=explode(" ",$current_date_time); $current_date=$current[0]; $current_time=$current[1]; $db_date_time="2010-07-30 13:11:50"; $db=explode(" ",$db_date_time); $db_date=$db[0]; $db_time=$db[1];
я не знаю, как продолжить помощь plz
<?php //$now = new DateTime(); // current date/time $now = new DateTime("2010-07-28 01:11:50"); $ref = new DateTime("2010-07-30 05:56:40"); $diff = $now->diff($ref); printf('%d days, %d hours, %d minutes', $diff->d, $diff->h, $diff->i);
отпечатки 2 days, 4 hours, 44 minutes
см. http://docs.php.net/datetime.diff
edit: Но вы также можете перенести проблему на сторону базы данных, например, сохраняя дату / время истечения срока в таблице, а затем выполните запрос типа
... WHERE key='7gedufgweufg' AND expires<Now()
Многие rdbms имеют разумную / хорошую поддержку арифметики даты / времени.
Что вы можете сделать, так это конвертировать обе даты в эпоху Unix , то есть эквивалентное количество секунд с полуночи 31 декабря 1969 года. Из этого вы можете легко определить количество времени, прошедшего между двумя датами. Для этого вы можете использовать mktime () или strtotime ()
Всего наилучшего.
$ hoursDiff = (time () – strtotime ("2010-07-30 13:11:50")) / (60 * 60);
Я предпочел бы работать с меткой времени. Сохраните значение, которое возвращается «time ()» как «savedTime» в вашу базу данных (это временная метка в секундах). Вычитайте это число из «time ()», когда вы проверяете свои шесть часов.
if ((time() - savedTime) > 6 * 3600) // more than 6h ago
или
"SELECT FROM table WHERE savedTime < " . (time() - 6 * 3600)
Это может быть решением вашей проблемы -> Как рассчитать разницу между двумя датами с помощью PHP?