php 我的 if 条件有问题

php having an issue with my if condition

我的 if 条件似乎有问题。 每当我输入一个过期超过 31 天的许可证时,它就会进入这样一种情况,即当许可证过期日期大于 31 天时,它会给出一个绿色圆圈和绿色文本。 它显示为既已过期又将在 31 天后过期,并给出红色和绿色的圆圈和文本。

这是一个片段。

$exp = strtotime($exp_date);

$td = strtotime($today_date);

$diff= $td -$exp;

$x = abs(floor($diff/ (60 * 60 * 24)));


$alertdays = ""; //expired

$alertdays1 = ""; //less than 30 days before expiry

$alertdays2 = ""; //more than 30 days




$statusexp = ""; //expired

$status = ""; //less than 30 days
$status1 = ""; //more than 30 days

$daysexp = ""; //days expired


if($td > $exp)
{
$statusexp = '<i class="fa fa-circle" style="font-size:30px; color:red;"></i>';
}


if($diff < 0){
$status = '<i class="fa fa-circle" style="font-size:30px; color:orange;"></i>';
}

if($diff <= 30) {

$alertdays1 = $x. ""; 

}
if($x >= 31){
$alertdays1 = "";
$alertdays2 = $x. "";
$status ='<i class="fa fa-circle" style="font-size:30px; color:green;"></i>'; 
}


if($td > $exp){
$alertdays ="Expired";
$daysexp  = " - " . $x; 
}

Output

你可以创建函数

例如:

<?php
function Mehrdad_Diff_Alldate($startTime) {
$start_date = new DateTime($startTime);
$endTime = date("Y-m-d H:i:s");
$since_start = $start_date->diff(new DateTime($endTime));
$text=$since_start->y.'|'.$since_start->m.'|'.$since_start->days.'|'.$since_start->h.'|'.$since_start->i.'|'.$since_start->s.'|';
return $text;   
}

$td =  date("Y-m-d H:i:s");
$exp="2007-08-12 13:10:56";
$exps = Mehrdad_Diff_Alldate($exp);
$explode=explode("|",$exps);
$year=$explode[0];
$month=$explode[1];
$day=$explode[2];
$hours=$explode[3];
$mintue=$explode[4];
$second=$explode[5];
?>

现在您可以使用 $day 尽量不要把这些术语分开

例如:

<?php
if($td > $exp){

}else if($day < 0){

}else if($day <= 30) {

}else if($day >= 31){

}else if($td > $exp){

}else{

}
?>

你的代码的问题是你使用 ABS 函数来计算今天和目标日期的差异。如果你使用 2018-02-01 来测试它,结果应该是 -41,但是使用 ABS 你得到 41,所以你的代码给出 "green" 结果。