Дата PHP: номера недель за 2015/2016

Как указано в ISO 8601, есть годы, в которых будет 53 недели, 2015 год — один из них. Каким будет номер следующей недели в 2016 году? Это начинается снова с недели 01? Причина, по которой я спрашиваю, состоит в том, что в одном из моих проектов URL-адрес «2016-W01» показывает неправильные дни (например, понедельник, 2 января 2016 года, где он должен быть понедельник, 4 января 2016 года). Если я звоню «2016-W02», наступают правильные дни (4-10 января), но «очевидно?» это должно быть week01, а не Week2 ..

Есть идеи по этому поводу? Спасибо!

3

Решение

<?php
$dt = new DateTime('2015-12-27');
for($i=0; $i<12; $i++) {
echo $dt->format('Y-m-d , D, W'), "\r\n";
$dt->modify('+ 1 day');
}

печать (без описания)

2015-12-27 , Sun, 52
2015-12-28 , Mon, 53\
2015-12-29 , Tue, 53|
2015-12-30 , Wed, 53|
2015-12-31 , Thu, 53 <-- this thursday is in 2015, therefore this is week 53
2016-01-01 , Fri, 53|
2016-01-02 , Sat, 53|
2016-01-03 , Sun, 53/

2016-01-04 , Mon, 01\
2016-01-05 , Tue, 01|
2016-01-06 , Wed, 01|
2016-01-07 , Thu, 01 <-- this is the first thursday in 2016, therefore this is week 1

edit and btw: Вы можете захотеть переключить свой проект на использование стандартного парсера даты / времени php:

<?php
$dt = new DateTime('2016W01'); echo $dt->format('Y-m-d, D, W'), "\r\n";
$dt = new DateTime('2016W02'); echo $dt->format('Y-m-d, D, W'), "\r\n";

печать

2016-01-04, Mon, 01
2016-01-11, Mon, 02
1

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

Неделя начинается с 01 по 1 января. Но в этом случае 1 января на неделе 53, поэтому она пропустит неделю 01 и покажет вам как неделю 02 для 4-10 января.

0

По вопросам рекламы [email protected]