PHP: strftime () против последнего дня года - PullRequest
0 голосов
/ 26 ноября 2018

strftime () неправильно форматирует год для последнего дня текущего года.Следующее возвращает «31. Dezember 2019»:

strftime('%d. %B %G',strtotime('31 December 2018'))

Поведение воспроизводится на нескольких серверах.date () решает правильно, но это не вариант из-за setlocale ()

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

%G будет представлять собой четырехзначную версию %g ( Двухзначное представление года в соответствии со стандартами ISO-8601: 1988 (см.% V) ).

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

Попробуйте %Y.

DOCS

DEMO

0 голосов
/ 26 ноября 2018

Это проблема setlocale.Декабрь правильный в Германии, так что я думаю, ваш сервер находится в Европе / Берлине.Попробуйте переписать его следующим образом:

setlocale(LC_ALL, 'nl_NL'); //for Netherlands just an example

Согласно документации strftime:

Отформатируйте время и / или дату в соответствии с настройками локали.Имена месяцев и дней недели, а также другие зависящие от языка строки соответствуют текущей локали, установленной с помощью setlocale ().

0 голосов
/ 26 ноября 2018

Используйте %Y вместо %G, если вы не хотите иметь дело с ISO-8601: 1988

Согласно этой спецификации, неделя №1 - это первая неделя (начиная с понедельника), включая четвергв январе 2018-12-31 является частью этой недели (2019-01-03 - четверг).

Таким образом, %G возвращает 2019.

%G

Полная четырехзначная версия [год, соответствующий стандартам ISO-8601: 1988]

...