2016-04-14 21 views
1

我已經創建了一種計算貸款應用程序攤銷計劃的方法。我使用的碳增加了一個月的每個用戶都有時間,使他們的貸款支付的,這裏是我的代碼片段:PHP使用Laravel 5.2和Carbon不能正確添加月份

public function amoritization($amount,$interest_rate,$repaid_months,$start_date) 
{ 
    $beginning_balance = $amount; 
    $interest = $interest_rate/100/12; 
    $payback = $repaid_months; 
    $x = pow(1 + $interest,$payback); 
    $monthly_payment = ($beginning_balance*$x*$interest)/($x-1); 

    $payment_date = new Carbon($start_date) 


    $info = (object)[]; //convert empty array to an object 
    $amoritization = []; 
    $count = 0; 
    while($payback > 0){ 
     $total_interest = $interest * $beginning_balance; //interest 
     $principal_payment = $monthly_payment - $total_interest; //principal 
     $ending_balance = $beginning_balance - $principal_payment; //ending balance 

     $info->beginning_balance = (float)$beginning_balance; 
     $info->total_interest = $total_interest; 
     $info->payment = $monthly_payment; 
     $info->principal_payment = $principal_payment; 
     $info->ending_balance = $ending_balance; 
     $info->payment_date = $payment_date->addMonths($count++); 

     array_push($amoritization,$info); 
     $beginning_balance = $ending_balance; 
     $info = (object)[]; 
     $payback--; 
    } 

    return $amoritization; 
} 

此方法在我的控制器調用這樣的:

return $this->calculation->amoritization($data['amount'],$data['interest_rate'],$data['loan_term'],$data['start_date']); 

這是問題,比如說$ start_date變量存儲了這個值2016-04-14 10:34:56而$ payback變量的值是6.在while循環語句中,我有$ info對象添加payment_date屬性,用於存儲添加的月份:

$info->payment_date = $payment_date->addMonths($count++); 

當while循環語句循環一次我應該得到的值是2016-05-14。但是,這是我得到了響應返回:

payment_date :{date: "2016-10-14 10:34:56.247000", timezone_type: 2, timezone: "Z"} 

而且,當我做到這一點的循環:

return $info->payment_date; 

我回來的價值2016年5月14日。這可能是什麼原因?在此先感謝您的幫助,

回答

1

只要做到:

$info->payment_date = $payment_date->addMonths(1); //or just $payment_date->addMonth(); 

比方說:$start_date = '2016-04-14';

您的問題是$count++在第一次迭代中爲1,並添加了1個月

$payment_date現在'2016-05-14'

是在第二次迭代$count現在等於2,並增加了2個月

$payment_date現在'2016-07-14'

是在第三次迭代$count現在等於3,並增加了3個月

$payment_date現在'2016-10-14'

當你做return這是它的第一次迭代後停止在循環中。

+0

我試過這個$ info-> payment_date = $ payment_date-> addMonths(1);,但仍然得到相同的日期,2016-10-14對於每個對象數組中的每個payment_date屬性 – newbieDev

0

我面臨同樣的問題。

顯然有一個錯誤。你不能使用addMonths()到月末的日期,例如5月30日或31日。

我仍然不確定爲什麼,但如果你使用addMonths()和2月1日這樣的日期,它會很好地和正確地相加。

基本上你必須在使用addMonths()之前將日期調整到更早的日期。

這個bug讓我發瘋。