【问题标题】:Year value error from PHP date() [duplicate]PHP date()的年值错误[重复]
【发布时间】:2025-11-28 18:35:02
【问题描述】:

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

开始日期:2013-01-01

结束日期:2013-02-23

生成的数组:

数组 ( [0] => 数组 ( [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,则没有问题。

谁能提供一个解决方案来保证我的年份和周值始终正确?

【问题讨论】:

  • 谢谢,链接中的示例解决了我的问题。

标签: php date datetime date-range


【解决方案1】:

我能够使用以下方法解决我的问题:

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

【讨论】:

  • 删除了我的答案,因为它显然没有用,但您实际上仍然没有非常清楚地解释问题所在。
最近更新 更多