Я нашел возможную ошибку в 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 года.
Это не ошибка.
Как кто-то указал в ответ на сообщение об ошибке кто-то еще подал какое-то время назад:
% 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 рабочими днями, причем понедельник является началом недели.
Других решений пока нет …