Я делаю PHP-скрипт, который я планирую запускать каждый день в 9 утра.
Мне нужно перебрать все сохраненные детали в таблице карт в моей БД. В каждой строке у меня есть столбец expirationDate, и мне нужно проверить, находится ли это значение в течение 3 месяцев с текущей даты, и, если это так, отправить электронное письмо, чтобы напомнить пользователю, что срок действия его карты скоро истечет. Они также хотят отправить второе напоминание, если expirationDate находится в течение месяца.
У меня возникли проблемы с логикой сравнения для проверки того, что срок действия истекает через 3 месяца после текущей даты. Код ниже:
...
if ($Cards = mysqli_stmt_get_result($stmt)){
while($row=mysqli_fetch_array($Cards))
{
$email = $row['email'];
$name = $row['Name'];
$expDate = $row['expDate'];
$reminderSent = $row['reminderSent'];
$timeDiff = (intVal(time()) - intVal($expDate));
echo "curDate is ". time() . " and expDate is ".$expDate. ". Difference is ".(intval(time()) - intVal($expDate));
echo "<br>";
//if ($timeDiff within3months){
// if ($reminderSent == 0) {
// //php code to send email
// }
// else if ($reminderSent == 1 && $timeDiff within1month){
// //php code to send email
// }
//}
}
}
...
У меня была мысль, я мог бы, возможно, найти значение эпохи за 3 месяца и добавить его к моей дате истечения срока действия val и проверить, больше ли curDate, чем это. Будет ли что-то подобное работать?
E.G: $expDate + 5097600 > intVal(time())
Любой совет приветствуется, если есть лучший подход к решению этой проблемы.
Вы получаете метку времени Unix для даты три месяца назад с strtotime('-3 months');
и можете сравнить его с отметкой времени, которая у вас есть в $row['expDate']
,
Другим решением было бы сравнить его в SQL:
DATEDIFF(FROM_UNIXTIME(expDate), DATE_SUB(CURDATE(), INTERVAL 3 MONTH))
даст вам положительное значение, если expDate
находится в этом диапазоне и отрицательное значение еще.
Там нет необходимости intVal()
time()
функция. Но если вы хотите изменить свою лучшую ставку, DateTime diff
$now = new DateTime();
$then = new DateTime($expDate);
$diff = $then->diff($now);
echo 'Difference is ' . $diff->format('%a days');