Я пытаюсь получить массив годовой недели, используя 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
...
)
Есть ли хитрость, чтобы избежать такого рода ошибок?
Вам необходимо использовать год ISO в формате «o»:
$yearweeks[$date->format('oW')] = 'W' . $date->format('W-o');
о
ISO-8601 год номер. Это имеет то же значение, что и Y, за исключением того, что если
номер недели ISO (W) относится к предыдущему или следующему году, что
вместо этого используется год. (добавлено в PHP 5.1.0)Примеры: 1999 или 2003
Других решений пока нет …