2017-09-29 2 views
1

Ich brauche die letzten 13 Monate ab dem aktuellen Monat, aber wenn ich den Code unten versuche. Es kommt jeden Monat aber 022017. Irgendwelche Vorschläge warum?PHP Carbon Laravel - No 022017

for ($i = 13; $i > 0; $i--) { 
    $dates->addDate(Carbon::now()->subMonth($i)->format('mY')); 
} 

Ergebnisse:

0 => "082016" 
1 => "092016" 
2 => "102016" 
3 => "112016" 
4 => "122016" 
5 => "012017" 
6 => "032017" 
7 => "042017" 
8 => "052017" 
9 => "062017" 
10 => "072017" 
11 => "082017" 
+1

In diesem Jahr hatte Februar nur 28 Tage. Vielleicht ist das der Grund. – Jackowski

+2

Dies wird auf monatlicher Basis, immer am Ende des Monats, aus offensichtlichen Gründen gefragt .... Arbeit mit dem ersten Tag des Monats, nicht Tage, die nicht in einigen Monaten existieren –

+0

Haben Sie versucht, die zu verwenden 1. des aktuellen Monats als Startpunkt anstelle von 'Carbon :: now()' – teeyo

Antwort

0

Weil Sie Carbon::now() verwenden und senden Sie diese Frage am 29.. Es wird den Februar überspringen, da es nur 28 Tage für diesen Monat gibt.

So etwas sollte funktionieren:

$now = Carbon::now(); 
$month = $now->day = 1; 
for ($i = 13; $i > 0; $i--) { 
    $month->subMonth(); 
    $dates->addDate($month->format('mY')); 
}