PHP日期()的年份值错误

时间:2013-02-21 16:13:22

标签: php date datetime date-range

给定开始日期和结束日期,我需要生成一个包含年和周值的数组。 例如:

开始日期: 2013-01-01

结束日期: 2013-02-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-02-23

在这种情况下,它应该有一个带有year = 2013和week = 01的子数组,它的年份值实际上等于2012年。

例如,如果我将开始日期切换为2013-01-05,则没有问题。

任何人都可以提供一种解决方案,保证我的年和周值始终正确吗?

1 个答案:

答案 0 :(得分: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;
}