echo date("Y", strtotime('2019-W01'));
Это должно дать мне «2019», верно?
Нет, это дает «2018».
Когда он является
echo date("Y", strtotime('2019-W02'));
На этот раз это даёт «2019», верно.
Я полагаю, это ошибка или есть что-то, чего я не знаю?
(часовой пояс по умолчанию UTC при тестировании этого)
Это не ошибка, это работает, как ожидалось. echo $date->format('Y');
возвращает 2018, потому что первый неделя 2019 это день 2018-12-31. Посмотрим когда попробую с форматом Y-m-d
например echo date("Y-m-d", strtotime('2019-W01'));
это возвращается 2018-12-31
и для echo date("Y", strtotime('2019-W01'));
это возвращается 2019
потому что это так 2019-01-07
, Давай попробуем это echo date("Y-m-d", strtotime('2019-W02'));
<?php
$date= new \DateTime('2019-W01');
echo $date->format('Y');
echo PHP_EOL;
echo $date->format('Y-m-d');
//echo date("Y", strtotime('2019-W01'));
?>
DEMO: https://3v4l.org/GsF1t
Других решений пока нет …