错误的滞纳金

时间:2016-05-04 20:16:41

标签: php

我在计算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;
}

?>

2 个答案:

答案 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);
}

?>