Форматирование объекта DateTime с учетом Locale :: getDefault () - PullRequest
57 голосов
/ 05 января 2012

У меня есть объект DateTime, который я сейчас формирую через

$mytime->format("D d.m.Y")

, который дает мне именно тот формат, который мне нужен:

Вт 5.3.2012

Единственный пропущенный пункт - правильный язык.Мне нужен перевод на немецкий язык Tue (Tuesday), то есть Die (Dienstag).

Это дает мне правильную настройку локали

Locale::getDefault()

Но я не понимаюне знаю, как сказать DateTime::format, чтобы использовать его.

Нет ли способа сделать что-то вроде:

$mytime->format("D d.m.Y", \Locale::getDefault());

Ответы [ 2 ]

109 голосов
/ 04 июня 2013

Вы можете использовать расширение Intl для форматирования даты. Дата / время будут отформатированы в соответствии с выбранным языком или вы можете переопределить его с помощью IntlDateFormatter::setPattern().

Быстрый пример использования пользовательского шаблона для желаемого формата вывода может выглядеть следующим образом.

$dt = new DateTime;

$formatter = new IntlDateFormatter('de_DE', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT);
$formatter->setPattern('E d.M.yyyy');

echo $formatter->format($dt);

Что выводит следующее (по крайней мере, на сегодня).

Di. 4.6.2013


Редактировать : Ааа, бу! Ответил на древний вопрос, потому что некоторые комментарии увеличили его список! По крайней мере, опция Intl упоминается сейчас.

57 голосов
/ 05 января 2012

Это потому, что format не обращает внимания на локаль.Вместо этого следует использовать strftime.

Например:

setlocale(LC_TIME, "de_DE"); //only necessary if the locale isn't already set
$formatted_time = strftime("%a %e.%l.%Y", $mytime->getTimestamp())
...