【问题标题】:Most efficient way to get array of months in array of years获得数年数月数的最有效方法
【发布时间】:2013-02-27 20:36:42
【问题描述】:

获取从指定日期到现在按年份分组的月份数组的最有效方法是什么。

例如 getMonths("August 2012") 将输出

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

这是输出正确的月份,但没有将它们分组为年份。 谢谢

【问题讨论】:

    标签: php monthcalendar


    【解决方案1】:

    你可以试试

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

    【讨论】:

      【解决方案2】:

      由于此处发布的答案对我不起作用(确定还尝试了在线沙箱),我编写了一个适用于大多数 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;
          }
      

      【讨论】:

        猜你喜欢
        • 2011-08-14
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 2015-11-14
        • 1970-01-01
        • 2020-12-08
        • 2013-03-05
        • 2018-07-21
        相关资源
        最近更新 更多