Как сделать так, чтобы срок действия ссылки на электронную почту истек через X минут в php? - PullRequest
0 голосов
/ 26 марта 2019

Я работаю над истечением срока действия ссылки по электронной почте через несколько X минут, где X обозначает некоторые случайная дата_ время . поэтому мой мотив состоит в том, чтобы истечь связь через некоторое время, что когда-либо я установил date_time в сторону $ expire_date .

Итак, я просто создал фиктивный код, чтобы убедиться, что мой код работает или нет.

$currentDateTime = new \DateTime(); 
$currentDateTime-> setTimezone(new \DateTimeZone('Asia/kolkata'));
$now = $currentDateTime-> format(' h:iA j-M-Y ');
$expire_date = "02:59PM 26-Mar-2019"; 

if($now > $expire_date) 
{ 
    echo " link is expired"; 
}
else{ 
    echo " link still alive "; 
}

Я полагаю, что что-то упущено в приведенном выше коде, так или иначе приведенный выше код не работает, если кто-то укажет правильное направление или лучшую реализацию, это было бы здорово.

Ответы [ 3 ]

1 голос
/ 26 марта 2019

Если вы хотите сравнить даты в PHP, лучше всего использовать отметки времени UNIX .Отметка времени UNIX - это количество секунд с начала эпохи UNIX (00:00:00 четверга, 1 января 1970 года).

time() вернет текущую отметку времени UNIX.
strtotime()преобразуйте строку даты в метку времени UNIX.

Таким образом, заменив эти две строки:

$now = $currentDateTime-> format(' h:iA j-M-Y ');
$expire_date = "02:59PM 26-Mar-2019";

на эти:

$now = time();
$expire_date = strtotime("02:59PM 26-Mar-2019");

Должен решить вашу проблему.

1 голос
/ 26 марта 2019

Вы сравниваете время как строки. Это не работает, так как ваша первая отформатированная строка имеет начальный пробел.

Вместо этого попробуйте либо удалить пробел, либо лучше сравнить время как объекты DateTime:

$timezone = new \DateTimeZone('Asia/kolkata');

// Create the current DateTime object
$currentDateTime = new \DateTime(); 
$currentDateTime-> setTimezone($timezone);

// Create the given DateTime object
$expire_date = "02:59PM 26-Mar-2019"; 
$expireDateTime = \DateTime::createFromFormat($expire_date, 'h:iA j-M-Y');

// Compare the objects
if($currentDateTime > $expireDateTime) 
{ 
    echo " link is expired"; 
}
else{ 
    echo " link still alive "; 
}
1 голос
/ 26 марта 2019

Вы сравниваете строки даты, которые не будут работать.Вы должны проанализировать строку с объектом даты или времени, прежде чем вы сможете сравнить эти значения.

Например, используя отметки времени:

$expire_date = "02:59PM 26-Mar-2019"; 

if (time() > strtotime($expire_date)) { 
    echo "link is expired"; 
} else { 
    echo "link still alive "; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...