как вычесть две даты и время, чтобы получить разницу - PullRequest
8 голосов
/ 30 июля 2010

Я должен отправить электронное письмо, когда пользователь, зарегистрировавший электронное письмо, содержит ссылку, которая становится недействительной через шесть часов. Что я делаю, когда отправляю электронную почту, я обновляю базу данных с полем emailSentDate типа «datetime», теперь я получил текущую дату ивремя и соответствует тому же формату, что и в БД. Теперь я хочу найти, что обе эти даты и время имеют разность 6 часов или нет, поэтому я могу сделать ссылку недействительной, но я не знаю, как это сделать

мой код выглядит так: я использую жестко закодированное значение для дБ, например,

$current_date_time=date("Y-m-d 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

Ответы [ 5 ]

19 голосов
/ 30 июля 2010
<?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 имеют разумную / хорошую поддержку арифметики даты и времени.

3 голосов
/ 30 июля 2010

Что вы можете сделать, это конвертировать обе ваши даты в время эпохи Unix , то есть эквивалентное количество секунд с полуночи 31 декабря 1969 года. Из этого вы можете легко вывести сумму время, прошедшее между двумя датами. Для этого вы можете использовать mktime () или strtotime ()

Всего наилучшего.

2 голосов
/ 30 июля 2010

$ hoursDiff = (time () - strtotime ("2010-07-30 13:11:50")) / (60 * 60);

1 голос
/ 30 июля 2010

Я бы лучше поработал с отметкой времени: сохраните значение, возвращаемое функцией «time ()» как «saveTime» в вашу базу данных (это отметка времени в секундах). Вычтите это число из «time ()», когда вы проверите свои шесть часов.

if ((time() - savedTime) > 6 * 3600) // more than 6h ago

или

"SELECT FROM table WHERE savedTime < " . (time() - 6 * 3600)

0 голосов
/ 30 июля 2010

Возможно, это решение вашей проблемы -> Как рассчитать разницу между двумя датами с помощью PHP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...