date("YW", strtotime("2016-01-02")); returns “201653”
Год в порядке
Неделя с 2015 года
PHP это ISO-8601 соответствует датам:
Цель этого стандарта состоит в том, чтобы предоставить однозначный и четко определенный метод представления дат и времени, чтобы избежать неверного толкования числовых представлений дат и времени, особенно когда данные передаются между странами с различными соглашениями для записи числовых дат и времени. ,
Это означает, что первая неделя года определяется как:
неделю с первым четвергом года
Если 1 января — в понедельник, вторник, среду или четверг, то это на неделе 01. Если 1 января — на пятницу, субботу или воскресенье, то это на неделе 52 или 53 предыдущего года (недели 00 нет). ,
Это означает, что 2 января 2016 года не на первой неделе 2016 года, что касается PHP.
Если вы используете o
флаг для date()
Вы получите ISO-8601 год, который вернется в 2015 году:
echo date("oW", strtotime("2016-01-02"));
// outputs: 201553
Один из способов, который вы можете рассмотреть, — это проверить, является ли месяц январем, а номер недели — 53, тогда это первая неделя нового календарного года (а не года ISO-8601).
if (date('n') == 1 && date('W') == 53) {
// first calendar week of the year
}
PHP использует номер недели по ISO-8601, начиная с понедельника. Если 1 января года не в понедельник, эта конкретная неделя считается последней неделей предыдущего года; 53 неделя
Поскольку 1 января 2016 года было пятницей, это часть недели, начинающейся 28 декабря 2015 года. Если вы запустите код echo date('Y-W', strtotime('2015-12-31'));
вы получите вывод «2015-53», поэтому дни той же недели также будут 53-й неделей в соответствии с ISO-8601.
PHP использует спецификацию ISO-8601 для номеров недель.
Определение первой недели года (ISO 8601):
Есть взаимно эквивалентные описания недели 01:
неделю с первым четвергом года (формальное определение ISO),
неделю с 4 января,
первая неделя с большинством (четыре или более) дней в начальном году, и
неделя, начинающаяся с понедельника в период с 29 декабря по 4 января.
Если 1 января в понедельник, вторник, среду или четверг, то это на неделе 01.
Если 1 января в пятницу, субботу или воскресенье, то это на 52 или 53 неделе предыдущего года (недели 00 нет). 28 декабря всегда последняя неделя года.
https://en.wikipedia.org/wiki/ISO_8601#Week_dates
Вот пример:
echo date("YW", strtotime("2016-01-02")); //201653
echo date("YW", strtotime("2016-01-04")); //201601