2013-11-21 98 views
1

我有這個函數返回一個年,月和日的數組,但我需要用幾周來替換這幾天,所以每個月的數組將包含星期。它不是那麼容易。獲取兩個日期之間的數年,數月和數週

$start_date = '2007-03-24'; 
$end_date = '2009-06-26'; 

year_month($start_date, $end_date); 


//Returns an array containing the years, months and days between two dates 
public function year_month($start_date, $end_date) 
{ 
    $begin = new DateTime($start_date); 
    $end = new DateTime($end_date); 
    $end->add(new DateInterval('P1D')); //Add 1 day to include the end date as a day 
    $interval = new DateInterval('P1D'); 
    $period = new DatePeriod($begin, $interval, $end); 
    $aResult = array(); 

    foreach ($period as $dt) 
    { 
     $aResult[$dt->format('Y')][$dt->format('F')][$dt->format('j')] = $dt->format('D'); 
    } 

    return $aResult; 
} 

目前導致:

[2013] => Array 
    (
     [October] => Array 
      (
       [15] => Tue 
       [16] => Wed 
       [17] => Thu 
       [18] => Fri 
       [19] => Sat 
       [20] => Sun 
       [21] => Mon 
       [22] => Tue 
       [23] => Wed 
       [24] => Thu 
       [25] => Fri 
       [26] => Sat 
       [27] => Sun 
       [28] => Mon 
       [29] => Tue 
       [30] => Wed 
       [31] => Thu 
      ) 

     [November] => Array 
      (
       [1] => Fri 
       [2] => Sat 
       [3] => Sun 
       [4] => Mon 
       [5] => Tue 
       [6] => Wed 
       [7] => Thu 
       [8] => Fri 
       [9] => Sat 
       [10] => Sun 
       [11] => Mon 
       [12] => Tue 
       [13] => Wed 
       [14] => Thu 
       [15] => Fri 
       [16] => Sat 
       [17] => Sun 
       [18] => Mon 
       [19] => Tue 
       [20] => Wed 
       [21] => Thu 
       [22] => Fri 
       [23] => Sat 
       [24] => Sun 
       [25] => Mon 
       [26] => Tue 
       [27] => Wed 
       [28] => Thu 
       [29] => Fri 
       [30] => Sat 
      ) 

     [December] => Array 
      (

我需要的是這樣的:

[2013] => Array 
    (
    [October] => Array 
     (
      [0] => week 1 
      [1] => week 2 
      [2] => week 3 
      [3] => week 4 
      [3] => week 5 
+0

您的評論說: 「1個月的間隔」,但你設定的時間間隔爲'P1D',仍然是一天。無論如何,幾個月是一個時髦的野獸。 1月31日+ 1個月應該「理論上」產生2月31日,這是一個無效的日期。你想要2月28日/ 29日(如果是閏年)還是3月2日/ 3日? –

+0

由於DateTime函數,此當前佔用了閏年。 – user794846

+0

@ user794846:我不太清楚'我需要用幾周時間來取代日子'。你能否將預期結果添加到問題中? –

回答

1

不確定我f這就是你想要的,但是,嘿嘿。

$start_date = '2007-03-24'; 
$end_date = '2009-06-26'; 

print_r(year_month($start_date, $end_date)); 


//Returns an array containing the years, months and week numbers between two dates 
function year_month($start_date, $end_date) 
{ 
    $begin = new DateTime($start_date); 
    $end = new DateTime($end_date); 
    $end->add(new DateInterval('P1D')); //Add 1 day to include the end date as a day 
    $interval = new DateInterval('P1W'); //Add 1 week 
    $period = new DatePeriod($begin, $interval, $end); 
    $aResult = array(); 
    foreach ($period as $dt) 
    { 
     $aResult[$dt->format('Y')][$dt->format('F')][] = "Week ".$dt->format('W'); 
    } 

    return $aResult; 
} 

將返回

Array 
(
    [2007] => Array 
     (
      [March] => Array 
       (
        [0] => Week 12 
        [1] => Week 13 
       ) 

      [April] => Array 
       (
        [0] => Week 14 
        [1] => Week 15 
        [2] => Week 16 
        [3] => Week 17 
       ) 

      [May] => Array 
       (
        [0] => Week 18 
        [1] => Week 19 
        [2] => Week 20 
        [3] => Week 21 
       ) 

      [June] => Array 
       (
        [0] => Week 22 
        [1] => Week 23 
        [2] => Week 24 
        [3] => Week 25 
        [4] => Week 26 
       ) 

      [July] => Array 
       (
        [0] => Week 27 
        [1] => Week 28 
        [2] => Week 29 
        [3] => Week 30 
       ) 
     ) 
) 

Full array

+0

由於這可能是我所期待的,生病需要將其應用到我的圖表來知道。 – user794846

1

這個功能應該這樣做,我使用的DateTime類的strtotime代替,雖然

function year_month($start_date,$end_date){ 
    $current_date = strtotime($start_date); 
    $end_date = strtotime($end_date); 
    $out=array(); 
    while($current_date<=$end_date){ 
      $out[date("Y",$current_date)][date("F",$current_date)][date("W",$current_date)][]=date("D",$current_date); 
      $current_date=strtotime("+1 days",$current_date); 
    } 
    return $out; 
} 

print_r(year_month("2007-03-24","2009-06-26")); 
+0

爲什麼你比'DateTime'更喜歡'strtotime()'? –

+0

我確定DateTime更好,但我習慣使用strtotime和unix時間戳,所以感覺和閱讀對我來說更自然。所以我用它 –

+0

我寧願DateTime。 – user794846

相關問題