2013-02-27 67 views
3

什么是最有效的方法来获取从指定的日期,直到现在的一个月的数组,按年分组。最有效的方法来获得年数阵列

如getMonths( “2012年8月”)将输出

array(
    array("Year"=>"2013", "months" = array(
     "February", "January") 
    ), 
    array("Year"=>"2012", "months" = array(
     "December", "November","October", "September", "August") 
    ) 
) 

到目前为止我有:

$start = strtotime('2012-08-01'); 
$end = time(); 
$month = $start; 
$months[] = date('F', $start); 
while($month <= $end) { 
    $month = strtotime("+1 month", $month); 
    $months[] = date('F', $month); 
} 

这是输出正确个月,但没有将它们组合成年。 感谢

回答

10

您可以尝试

function getMonths($month,$count = 1) { 
    $now = new DateTime(); 
    $start = DateTime::createFromFormat("F Y", $month); 
    $list = array(); 
    $interval = new DateInterval(sprintf("P%dM",$count)); 
    while ($start <= $now) { 
     $list[$start->format("Y")][] = $start->format("F"); 
     $start->add($interval); 
    } 
    return $list; 
} 

print_r(getMonths("August 2012")); 

输出

Array 
(
    [2012] => Array 
     (
      [0] => August 
      [1] => September 
      [2] => October 
      [3] => November 
      [4] => December 
     ) 

    [2013] => Array 
     (
      [0] => January 
      [1] => February 
     ) 

) 
+1

这看起来不错,不错的工作:) – user1477388 2013-02-27 20:44:47

+0

@use r1477388谢谢 – Baba 2013-02-27 20:47:06

0

由于此处公布的答案对我来说(也试过网上沙箱可以肯定)我写的作品有一个方法不起作用PHP的最多版本:

function getMonths($monat, $year) { 
     $list = array(); 
     for(;$monat <= 12;$monat++) { 
      if($year == date("Y") && $monat == date("m")) {  // exit on current month+year 
       break; 
      } 
      if(!isset($list[ $year ])) { 
       $list[ $year ] = array(); 
      } 
      $list[ $year ][ str_pad($monat, 2, '0', STR_PAD_LEFT) ] = date("F", strtotime('01.' . $monat . '.' . $year)); 

      if($monat == 12) { 
       $monat = 0; 
       $year++; 
      } 
     } 
     return $list; 
    }