Форматирование объекта 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());
Ответы
Ответ 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.