PHP: дата & quot; F & quot; с setlocale не работает

<ul>
<?php
$event_date = get_sub_field('event_date'); // 20150203
$event_date_format = DateTime::createFromFormat('Ymd', $event_date);
setlocale(LC_ALL, 'de_DE');
?>
<li>
<h6><?php echo $event_date_format->format('d');?>. <?php echo $event_date_format->format('F');?></h6>
<p><?php echo $event_date_format->format('H');?>:<?php echo $event_date_format->format('i');?></p>
</li>
</ul>

Выход этого

03. February
19:25

Почему setlocale не имеет никакого влияния на это. Я хочу, чтобы мой месяц «F» был на немецком 3. Feber 19:25

Есть идеи, что я здесь делаю не так?


ОБНОВЛЕНИЕ 1:

Если я попытаюсь использовать strftime() я внезапно получаю другую дату вывода. это по немецки но неправильно?

<ul>
<?php
$event_date = get_sub_field('event_date');
$event_date_format = DateTime::createFromFormat('Ymd', $event_date);
setlocale(LC_ALL, 'de_DE');
?>
<li>
<h6><?php echo $event_date_format->format('d');?>. <?php echo strftime('%B', $event_date);?></h6>
<p><?php echo $event_date_format->format('H');?>:<?php echo $event_date_format->format('i');?></p>
</li>
</ul>

Неожиданно дата выхода не 03. February но 03. Augustхотя дата должна быть февраль.

Есть идеи?


ОБНОВЛЕНИЕ 2:

Это довольно странно. Я только что проверил переменную $event_date онлайн в инструменте преобразования Unix, и я получаю это … 

$ event_date: 20150203

Sat, 22 Aug 1970 05:16:43 GMT

Значение устанавливается внутри бэкэнда WordPress с помощью средства выбора даты и четко указывает на 03/02/2015

введите описание изображения здесь

4

Решение

date() и DateTime не уважают язык

использование strftime()

http://php.net/manual/en/function.strftime.php

http://php.net/manual/en/function.date.php

Чтобы форматировать даты на других языках, вы должны использовать setlocale () и
Функция strftime () вместо date ().

5

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

Досадно, date не осведомлен о локали. Из руководства:

Чтобы форматировать даты на других языках, вы должны использовать setlocale () и
Функция strftime () вместо даты.

Вы, вероятно, хотите:

setlocale(LC_TIME, 'de_DE');
echo strftime('%B');

Кроме того, оформить заказ углерод. У него есть непротиворечивый API, который включает в себя понимание языка. В качестве примера:

setlocale(LC_TIME, 'German');
echo Carbon::now()->formatLocalized('%B'); // Sonntag
1

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