Межгодовая ширина DatePeriod DateInterval P7D теряет новогоднюю неделю

Я пытаюсь получить массив годовой недели, используя PHP DatePeriod, например, так:

$from = new DateTime('2014-09-16');
$to = new DateTime('2015-02-25');

$interval = new DateInterval('P7D'); // 7Days => 1 Week
$daterange = new DatePeriod($from, $interval, $to);

$yearweeks = array();
foreach($daterange as $date) {
$yearweeks[$date->format('YW')] = 'W' . $date->format('W-Y');
}

Результат довольно странный!
Первая неделя нового года отсутствует. У меня первая неделя предыдущего года вместо этого:

Array
(
...
[201451] => W51-2014
[201452] => W52-2014
[201401] => W01-2014 // WTF ? /!\ [201501] => W01-2015 expected ! /!\
[201502] => W02-2015
[201503] => W03-2015
...
)

Есть ли хитрость, чтобы избежать такого рода ошибок?

3

Решение

Вам необходимо использовать год ISO в формате «o»:

$yearweeks[$date->format('oW')] = 'W' . $date->format('W-o');

От PHP date документы:

о

ISO-8601 год номер. Это имеет то же значение, что и Y, за исключением того, что если
номер недели ISO (W) относится к предыдущему или следующему году, что
вместо этого используется год. (добавлено в PHP 5.1.0)

Примеры: 1999 или 2003

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector