PHP DateInterval函数给出错误的星期数结果

时间:2018-12-14 08:44:36

标签: php date for-loop

我有一个循环,如下所示将一个星期添加到给定日期,

$db_date = '201849';

$year = substr($db_date, 0, 4);
$week = substr($db_date, 4);

$dateFromStr = new DateTime();
$dateFromStr->setISODate($year, $week);

if($dateFromStr){
    for($b=0; $b < 27; $b++){
        $calc_date = clone $dateFromStr;
        $calc_date->add(new DateInterval("P" . $b . "W"));
        $header_week = $calc_date->format("YW");
    }   
}

输出:

  

201849,201850,201851, 201852,201801 ,201902,201903,....,201923

但正确的输出将是:

  

201849,201850,201851, 201852,201901 ,201902,201903,....,201923

我不知道为什么我得到201801而不是201901作为输出。

请帮助我解决这个问题。

2 个答案:

答案 0 :(得分:2)

  

我不知道为什么我得到201801而不是201901作为输出。

那是因为相应的日期是2018-12-31

如果要根据ISO周号指定年号,则必须使用o,而不要使用Y(在date()手动输入中也有提及)。

答案 1 :(得分:1)

$db_date = '201849';

$year = substr($db_date, 0, 4);
$week = substr($db_date, 4);

$dateFromStr = new DateTime();
$dateFromStr->setISODate($year, $week);

if($dateFromStr){
    for($b=0; $b < 27; $b++){
        $calc_date = clone $dateFromStr;
        $calc_date->add(new DateInterval("P" . $b . "W"));
        //$header_week = $calc_date->format("YW");
        $header_week = $calc_date->format("oW");
    }   
}