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