【问题标题】:PHP DateInterval function give wrong week number resultPHP DateInterval 函数给出错误的周数结果
【发布时间】:2018-12-14 08:44:35
【问题描述】:

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

$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 作为输出。

请帮我解决这个问题,谢谢。

【问题讨论】:

  • 注意:if ($dateFromStr) 不是必需的,因为new DateTime 要么返回一个对象(始终为真),要么发出异常。如果您使用DateTimeImmutable 类或基于DatePeriod 的脚本,也可以省略克隆。

标签: php date for-loop


【解决方案1】:

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

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

如果您想要根据 ISO 周数的年份编号,则必须使用 o,而不是 Y(在 date() 手册条目中也提到过)。

【讨论】:

    【解决方案2】:
    $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");
        }   
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多