Подтвердить что ты не робот

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

У меня есть объект 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());
4b9b3361

Ответ 1

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

Ответ 2

Вы можете использовать расширение 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


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