将存储的纪元日期与PHP中的当前日期进行比较

时间:2015-08-26 14:17:54

标签: php date epoch

我正在编写一个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())

如果有更好的方法来解决这个问题,任何建议都会受到赞赏。

2 个答案:

答案 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');