如何使用php在库罚款中不计算到期日之前的日期

如何使用php在库罚款中不计算到期日之前的日期,php,Php,这是我的库罚款计算代码 $currentdate= date('Y/m/d'); $start = new DateTime($returndate=$row['due_date']); <-- from database $end = new DateTime($currentdate); $days= $start->diff($end, true)->days; $fines = $days > 0 ? intval(floor($days)) * ₱10 : 0

这是我的库罚款计算代码

$currentdate= date('Y/m/d');

$start = new DateTime($returndate=$row['due_date']); <-- from database
$end = new DateTime($currentdate);
$days= $start->diff($end, true)->days;
$fines = $days > 0 ? intval(floor($days)) * ₱10 : 0;
$currentdate=日期('Y/m/d');
$start=newdatetime($returndate=$row['due_date']);差异($end,true)->天;
$罚款=$天>0?intval(最低(天))*₱10:0;

我想在到期日后计算每天借书的成本₱10,但它只是计算了当天的成本,显示为抱歉我是php编码的初学者谢谢你

$end
是currentday,因此即使currentdate小于duedate,它也会计算罚款。
您需要的是,如果currentday大于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;
}
$currentdate=日期('Y/m/d');
$start=newdatetime($returndate=$row['due_date']);strottime($returndate)){
$days=$start->diff($end,true)->days;
$fines=$days>0?intval(下限($days))*10:0;
}
strotime()将字符串格式的日期转换为UNIX时间(整数)

您可以在此处测试代码:

编辑:

方法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;
}
$currentdate=日期('Y/m/d');
$start=newdatetime($returndate=$row['due_date']);strottime($returndate)){
$days=$start->diff($end,true)->days;
$fines=$days>0?intval(下限($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;
$currentdate=日期('Y/m/d');
$start=newdatetime($returndate=$row['due_date']);strottime($returndate)){
$days=$start->diff($end,true)->days;
$fines=$days>0?intval(下限($days))*10:0;
}
//我想还有其他代码。。。
如果(isset($FIELES))回声$FIELES;
此处未设置$FINGES,除非有人超过了到期日,否则将不会响应。此方法可能在页面上看起来最好。

但我不知道您的页面是如何设置的。

$end
是currentday,因此即使currentdate小于duedate,它也会计算罚款。
您需要的是,如果currentday大于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;
}
$currentdate=日期('Y/m/d');
$start=newdatetime($returndate=$row['due_date']);strottime($returndate)){
$days=$start->diff($end,true)->days;
$fines=$days>0?intval(下限($days))*10:0;
}
strotime()将字符串格式的日期转换为UNIX时间(整数)

您可以在此处测试代码:

编辑:

方法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;
}
$currentdate=日期('Y/m/d');
$start=newdatetime($returndate=$row['due_date']);strottime($returndate)){
$days=$start->diff($end,true)->days;
$fines=$days>0?intval(下限($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;
$currentdate=日期('Y/m/d');
$start=newdatetime($returndate=$row['due_date']);strottime($returndate)){
$days=$start->diff($end,true)->days;
$fines=$days>0?intval(下限($days))*10:0;
}
//我想还有其他代码。。。
如果(isset($FIELES))回声$FIELES;
此处未设置$FINGES,除非有人超过了到期日,否则将不会响应。此方法可能在页面上看起来最好。

但是我不知道你的页面是如何设置的。

谢谢!!!它计算了,但如果我把当天或到期日之前,它会给出错误@KyousukeKousaka Yes,这是因为罚款美元尚未计算。您可以先确定它是否已设置且仅在设置时回显,也可以将它设置为0并仅在有罚款时更改。我将更新以向您展示这两种方法。@KyousukeKousaka没问题。请记住,我必须删除你的“P”符号。在做数学的时候,在代码中包含这一点是行不通的(至少对我来说是这样)。因此,要么将其添加到
echo“P”中$罚款或者如果它在过去对你有用,就把它放回数学中。谢谢!!!它计算了,但如果我把当天或到期日之前,它会给出错误@KyousukeKousaka Yes,这是因为罚款美元尚未计算。您可以先确定它是否已设置且仅在设置时回显,也可以将它设置为0并仅在有罚款时更改。我将更新以向您展示这两种方法。@KyousukeKousaka没问题。请记住,我必须删除你的“P”符号。在做数学的时候,在代码中包含这一点是行不通的(至少对我来说是这样)。因此,要么将其添加到
echo“P”中$罚款或将其放回数学中,如果它在过去对您有效。