答案 0 :(得分:0)
$end
是当前日期,因此即使currentdate小于duedate,也会计算罚款。
你需要的是如果当前日期超过duedate,那么计算罚款。
$currentdate = date('Y/m/d');
$start = new DateTime($returndate=$row['due_date']); <-- from database
$end = new DateTime($currentdate);
if(strtotime($currentdate) > strtotime($returndate)){
$days= $start->diff($end, true)->days;
$fines = $days > 0 ? intval(floor($days)) * 10 : 0;
}
strtotime()会将字符串格式的日期转换为UNIX时间(整数)。
您可以在此处测试代码:https://3v4l.org/fl3IM
编辑:
方法1.
$currentdate = date('Y/m/d');
$start = new DateTime($returndate=$row['due_date']); <-- from database
$end = new DateTime($currentdate);
$fines = 0;
if(strtotime($currentdate) > strtotime($returndate)){
$days= $start->diff($end, true)->days;
$fines = $days > 0 ? intval(floor($days)) * 10 : 0;
}
现在它将显示罚款0,直到有人通过截止日期。 (可能看起来在页面中混乱)
方法2.
$currentdate = date('Y/m/d');
$start = new DateTime($returndate=$row['due_date']); <-- from database
$end = new DateTime($currentdate);
if(strtotime($currentdate) > strtotime($returndate)){
$days= $start->diff($end, true)->days;
$fines = $days > 0 ? intval(floor($days)) * 10 : 0;
}
//some other code I guess...
if(isset($fines)) echo $fines;
此处$ fines未设置,除非有人通过截止日期,否则不会回显。这种方法可能在页面上看起来最好 但我不确切知道你的页面是如何设置的。