Почему strftime (‘% G’, strtotime (‘2017-01-01’)) производит 2016 год?

Я нашел возможную ошибку в PHP 5.6. Функция strftime с параметром %G генерирует 4 цифры года. Тем не менее, кажется, вернется не тот год, когда кормили 1483246800 — то есть 1 января 2017 года. Вместо этого возвращается 2016!

Пример кода:

echo strftime('%G', strtotime('2017-01-01'));

Это должно вывести «2017», но вместо этого я получу «2016». Я использую PHP 5.6.
Этот крайний случай также проявляется в другие годы — например, 2016-01-03 выпускает 2015 вместо 2016 года.

2

Решение

Это не ошибка.

Как кто-то указал в ответ на сообщение об ошибке кто-то еще подал какое-то время назад:

% G — 4-значный год, соответствующий номеру недели ISO (см.% V). Он имеет тот же формат и значение, что и% Y, за исключением того, что если номер недели ISO относится к предыдущему или следующему году, вместо этого используется этот год…Напоминание о номерах недели ISO. Они начинаются по понедельникам, заканчиваются по воскресеньям и считается частью года, в который выпадает большинство их дней.

Это означает, что с помощью %G дата, близкая к началу / концу года, может дать вам правильный год, предыдущий год, как в вашем случае, или следующий год, (например, echo strftime('%Y', strtotime('2002-12-30)) дает 2003).

Если вы хотите получить правильный год, вы должны использовать %Y вместо. echo strftime('%Y', strtotime('2017-01-01')); дает 2017.

Также стоит проверить определение% V:

ISO-8601: номер недели 1988 года данного года, начиная с первой недели года, по крайней мере, с 4 рабочими днями, причем понедельник является началом недели.

7

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

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

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