Сравнить сохраненную дату эпохи с текущей датой в переполнении стека

Я делаю 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())

Любой совет приветствуется, если есть лучший подход к решению этой проблемы.

0

Решение

Вы получаете метку времени Unix для даты три месяца назад с strtotime('-3 months'); и можете сравнить его с отметкой времени, которая у вас есть в $row['expDate'],

Другим решением было бы сравнить его в SQL:

DATEDIFF(FROM_UNIXTIME(expDate), DATE_SUB(CURDATE(), INTERVAL 3 MONTH))

даст вам положительное значение, если expDate находится в этом диапазоне и отрицательное значение еще.

1

Другие решения

Там нет необходимости intVal() time() функция. Но если вы хотите изменить свою лучшую ставку, DateTime diff

$now = new DateTime();
$then = new DateTime($expDate);
$diff = $then->diff($now);
echo 'Difference is ' . $diff->format('%a days');
0

По вопросам рекламы [email protected]