Функция PHP DateInterval выдает неверный номер недели - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть цикл, который добавляет одну неделю к указанной дате следующим образом:

$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 голосов
/ 14 декабря 2018
$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");
    }   
}
0 голосов
/ 14 декабря 2018

Я не знаю, почему я получаю 201801 вместо 201901 в качестве вывода.

Это потому, что соответствующая дата 2018-12-31.

Если вы хотите, чтобы номер года соответствовал номеру недели ISO, вы должны использовать o, а не Y (что также упоминается при date () ручном вводе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...