2013-02-21 77 views
0

給定開始日期和結束日期,我需要生成一個包含年份和周值的數組。 例如:來自PHP日期的年值錯誤()

開始日期:2013-01-01

結束日期:2013年2月23日

生成陣列:

Array ([0] => Array ([week] => 01 [year] => 2013) 
[1] => Array ([week] => 02 [year] => 2013) 
[2] => Array ([week] => 03 [year] => 2013) 
[3] => Array ([week] => 04 [year] => 2013) 
[4] => Array ([week] => 05 [year] => 2013) 
[5] => Array ([week] => 06 [year] => 2013) 
[6] => Array ([week] => 07 [year] => 2013) 
[7] => Array ([week] => 08 [year] => 2013))

下面是代碼我正在使用產生此:

public static function getYearWeekRange($startdate, $enddate) { 
    $array = array(); 
    $starttime = strtotime($startdate); 
    $endtime = strtotime($enddate); 
    while ($starttime <= $endtime) { 
     $year = date('Y', $starttime); 
     $week = date('W', $starttime); 
     $array[] = array('week' => $week, 'year' => $year); 
     $starttime = strtotime('+1 week', $starttime); 
    } 
    return $array; 
} 

我的問題是,當我生成某些日期範圍時,我沒有在2013年開始時獲得正確的年份值。例如:

開始日期:2012-01-01

結束日期:2013年2月23日

在這種情況下,它應該有一年子陣= 2013周= 01,實際上它的年份值等於2012.

如果我將開始日期切換到2013-01-05例如,那麼沒有問題。

任何人都可以提供一個解決方案,以保證我的年份和周值始終正確嗎?

+0

感謝,在鏈接的例子固定我的問題。 – Justin 2013-02-21 16:34:53

回答

0

我可以使用來解決我的問題如下:

public static function getWeekRange($startdate, $enddate) { 
    $array = array(); 
    $p = new DatePeriod(
     new DateTime($startdate), 
     new DateInterval('P1W'), 
     new DateTime($enddate) 
    ); 
    foreach ($p as $w) { 
     $array[] = array('year' => $w->format('o'), 'week' => $w->format('W')); 
    } 
    return $array; 
} 
+0

刪除我的答案顯然它沒有用,但你還沒有真正解釋問題非常清楚。 – 2013-02-21 16:37:01