Я проверяю эти случаи:
$date = new \DateTime();
echo($date->format('Y.m.d')) . PHP_EOL;
$date->setISODate(2018, 1, 1);
echo($date->format('Y.m.d')) . PHP_EOL;
$date->setISODate(2019, 1, 1);
echo($date->format('Y.m.d')) . PHP_EOL;
$date->setISODate(2020, 1, 1);
echo($date->format('Y.m.d')) . PHP_EOL;
Ouput:
2017.08.17
2018.01.01
2018.12.31
2019.12.30
Я понял, что это покажет это:
2017.08.17
2018.01.01
2019.01.01
2020.01.01
Почему это происходит?
Конечно, есть кое-что, что я не совсем понял.
Аргументы year
, week
, dayofweek
, Неделя PHP начинается в понедельник, а первая неделя года — это первая неделя, на которую в январе уходит не менее 4 дней.
В 2018 году год начинается в понедельник, поэтому 1-я неделя начинается 1 января, а это 1-й день недели.
В 2019 году год начинается во вторник, поэтому первая неделя начинается в понедельник, 31 декабря 2018 года, и это первый день недели.
В 2020 году год начинается в среду, поэтому неделя 1 начинается в понедельник, 30 декабря 2019 года, то есть это первый день недели.
Других решений пока нет …