如何使用php计算图书馆罚款截止日期前的日期

时间:2017-08-06 04:41:18

标签: php

这是我的图书馆罚款计算代码

*ngFor

我想在截止日期之后每天计算借阅书费用10美元,但它只计算了当天并且显示为this抱歉我是php编码初学者谢谢

1 个答案:

答案 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未设置,除非有人通过截止日期,否则不会回显。这种方法可能在页面上看起来最好 但我不确切知道你的页面是如何设置的。