Форматирование объекта DateTime, учитывая Locale :: getDefault ()

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

$mytime->format("D dmY") 

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

Вторник 5.3.2012

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

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

 Locale::getDefault() 

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

Разве нет способа сделать что-то вроде:

 $mytime->format("D dmY", \Locale::getDefault()); 

Это потому, что 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()) 

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

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

 $dt = new DateTime; $formatter = new IntlDateFormatter('de_DE', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT); $formatter->setPattern('E dMyyyy'); echo $formatter->format($dt); 

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

Di. 4.6.2013


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