2016-07-25 15 views
0

Ich kann keinen Weg finden, Array für jeden Monat nach diesem aktuellen zu erstellen.Erstellen eines Arrays für jeden Monat nach dem heutigen Tag

  <?php 
       $month = 07; 
       $year = 2016; 
       $end = date('Y'); 
       for($i=0;$i<=$end-$year;$i++){ 
        $from = 1; 
        if($i==0) 
         $from = $month; 


        for($y=$from;$y<=12;$y++){ 
         if($year==date('Y') && $y > date('m')) 
          break; 

         $a = $year+$i.'-'.$y; 
         $months[$a] = $a; 
        } 
       } 
       krsort($months); 
      ?> 
      <?php echo Html::dropDownList('month_year',$month_year,$months,array('class'=>'form-control'));?> 

Ich möchte ein Dropdownlist erhalten, die so etwas wie dieses

2016-09

2016-08

2016-07

Für jeden Monat sieht das kommt. Anfangsdatum sollte 2016-07 sein. Und der Höchstwert sollte aktueller Monat sein.

Antwort

4

Erstellen Sie einfach ein Start- und Enddatum und Schleife durch sie:

$start = (new DateTime('next month'))->modify('first day of this month'); 
$end  = (new DateTime('+24 months'))->modify('first day of next month'); 
$interval = DateInterval::createFromDateString('1 month'); 
$period = new DatePeriod($start, $interval, $end); 

foreach ($period as $dt) { 
    echo $dt->format("Y-m") . "<br>\n"; 
} 

Ich benutze DateTime() mit DateInterval() und DatePeriod(), da dies der sauberste Weg, dies zu tun und übernimmt DST und Schaltjahr nativ.

Demo

+0

Dank die für mich gearbeitet, beginne ich gerade geändert fixiert und Ende zu aktuellen Monat zu sein. Danke für die Lösung :) –

Verwandte Themen