我正在编写一个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 :(得分:1)
您可以使用strtotime('-3 months');
获取三个月前的日期的unix时间戳,并将其与$row['expDate']
中的时间戳进行比较。
另一种解决方案是在SQL中进行比较:
DATEDIFF(FROM_UNIXTIME(expDate), DATE_SUB(CURDATE(), INTERVAL 3 MONTH))
如果expDate
在该范围内,则将为您提供正值,否则为负值。
答案 1 :(得分:0)
不需要intVal()
time()
功能。但如果你想切换最好的赌注是DateTime diff
$now = new DateTime();
$then = new DateTime($expDate);
$diff = $then->diff($now);
echo 'Difference is ' . $diff->format('%a days');