Formatting DateTime object, respecting Locale::getDefault()

stoefln picture stoefln · Jan 5, 2012 · Viewed 73.9k times · Source

I have a DateTime object which I'm currently formating via

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

Which gives me exactly the format I need:

Tue 5.3.2012

The only missing point is the correct language. I need German translation of Tue (Tuesday), which is Die (Dienstag).

This gives me the right locale setting

Locale::getDefault()

But I don't know how to tell DateTime::format to use it.

Isn't there a way to do something like:

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

Answer

salathe picture salathe · Jun 4, 2013

You can use the Intl extension to format the date. It will format dates/times according to the chosen locale, or you can override that with IntlDateFormatter::setPattern().

A quicky example of using a custom pattern, for your desired output format, might look like.

$dt = new DateTime;

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

echo $formatter->format($dt);

Which outputs the following (for today, at least).

Di. 4.6.2013


Edit: Ahh boo! Answered an ancient question because some comments bumped it up the list! At least the Intl option is mentioned now.