У меня есть объект 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 упоминается сейчас.