给定开始和结束日期,我需要生成一个包含年份和周值的数组。例如:
开始日期:2013-01-01
结束日期:2013-02-23
生成的阵列:
Array([0]=>Array([week]=>01[year]=>2013)[1] =>阵列([周]=>02[年]=>2013)[2] =>阵列([周]=>03[年]=>2013)[3] =>阵列([周]=>04[年]=>2013)[4] =>阵列([周]=>05[年]=>2013)[5] =>阵列([周]=>06[年]=>2013)[6] =>阵列([周]=>07[年]=>2013)[7] =>阵列([周]=>08[年]=>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
在这种情况下,如果它应该有一个年=2013、周=01的子数组,那么它的年值实际上等于2012。
例如,如果我将开始日期切换到2013-01-05,那么就没有问题。
有人能提供一个解决方案来保证我的年度和周值始终正确吗?
我能够使用以下方法解决我的问题:
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;
}