2016-05-04 17 views
0

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

ザ・あなたはあまり意味がありません持っているforループ。それでは、あなたは正確に何をしようとしていますか? – Maximus2012

+0

forループで '$ late'変数を使うのは何ですか? – Maximus2012

+0

私は15日ごとに自分のDBからの総数に1%をどのように加えるかを考えようとしています。今日の残高が1000で、15日以内に支払っていない場合は1%が加算されますが、30日以内に支払いをしないと、最初の15日間の延滞手数料の1%が加算されます。 –

答えて

1

おそらくabs機能を使用している可能性があります。 "今日"の日付(2016-03-02)と "請求書"の日付(2016-04-30)の差は、絶対値が15より大きい-15未満です。

この関数呼び出しを削除し、 $timeDiffが陽性であるかどうかを確認してください。正の値は、請求書が時間内に支払われていないことを意味し、料金を計算する必要があります。負または0は、請求書が時間内に支払われたことを意味します。

また、DateTimeの日付と時刻を保持するクラスと、DateIntervalの時間間隔を使ってコードを読みやすくすることを検討する必要があります。これらのクラスは、時間値を比較して操作する簡単な方法を提供することに注意してください。

+0

ソリューションのおかげで、あなたのソリューションは問題を解決しました。 –

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

?>