我在计算PHP的滞纳金时遇到了一些问题。当我在到期日之前支付金额时,它仍然计算滞纳金。在此代码中,我使用$invoicedate
作为截止日期。
我做错了什么?
<?php
$invoicedate = strtotime("2016-04-30");
$TodayDate = strtotime('2016-03-02');
$timeDiff = abs($TodayDate - $invoicedate);
$numberDays = $timeDiff/86400; // 86400 seconds in one day
$numberDays = intval($numberDays);
$noOfdaysToCheck ="15";
$Fees ="1000";
if ($numberDays >= $noOfdaysToCheck){
$Interval = $numberDays/$noOfdaysToCheck;
for($i=1;$i<=$Interval;$i++){
$late = (1 / 100) * $Fees;
$Fees = FeesCalc($Fees);
}
}
$Fees = number_format($Fees, 2, '.', '');
echo $Fees;
echo '<br />';
echo $numberDays;
function FeesCalc($Fees){
$late = (1 / 100) * $Fees;
return $TotalFees = $late+$Fees;
}
?>
答案 0 :(得分:1)
这可能是因为您使用的是abs
功能。
“今日”日期(2016-03-02)与“发票”日期(2016-04-30)之间的差异小于绝对值大于15的-15
。
您应该删除此函数调用并检查$timeDiff
是否为正数。正值意味着发票未及时支付,应计算费用。否定或零表示发票已及时支付。
您还应考虑使用DateTime类来保留日期和时间,并使用DateInterval进行时间间隔操作,以使您的代码更具可读性。请注意,这些类提供了比较和操作时间值的简便方法。
答案 1 :(得分:0)
你有一些逻辑问题。
试试这个:
<?php
$invoicedate = strtotime("2016-04-30");
$TodayDate = strtotime('2016-03-02');
$timeDiff = abs($TodayDate - $invoicedate);
$numberDays = $timeDiff/86400; // 86400 seconds in one day
$numberDays = intval($numberDays);
$noOfdaysToCheck ="15";
$Fees ="1000";
if ($numberDays >= $noOfdaysToCheck){
$Interval = $numberDays/$noOfdaysToCheck;
$Fees = FeesCalc($Fees,$Interval);
}
$Fees = number_format($Fees, 2, '.', '');
echo $Fees;
echo '<br />';
echo $numberDays;
function FeesCalc($Fees, $days){
$late = ($days / 100) * $Fees;
return ($late+$Fees);
}
?>