Date function output in a local language [duplicate]
I am trying to output dates in the Italian format using date()
as follows:
<?php
setlocale(LC_ALL, 'it_IT');
echo date("D d M Y", $row['eventtime']);
?>
However, it is still coming out in the English format. What else could I do? Is there something wrong?
The solution has to be script specific and not server-wide.
Solution 1:
date()
is not locale-aware. You should use strftime()
and its format specifiers to output locale-aware dates (from the date()
PHP manual):
To format dates in other languages, you should use the
setlocale()
andstrftime()
functions instead ofdate()
.
Regarding Anti Veeranna's comment: he is absolutely right, since you have to be very careful with setting locales as they are sometimes not limited to the current script scope. The best way would be:
$oldLocale = setlocale(LC_TIME, 'it_IT');
echo utf8_encode( strftime("%a %d %b %Y", $row['eventtime']) );
setlocale(LC_TIME, $oldLocale);
Solution 2:
I found that setlocale
isn't reliable, as it is set per process, not per thread (the manual mentions this). This means other running scripts can change the locale at any time. A solution is using IntlDateFormatter from the intl
php extension.
$fmt = new \IntlDateFormatter('it_IT', NULL, NULL);
$fmt->setPattern('d MMMM yyyy HH:mm');
// See: http://userguide.icu-project.org/formatparse/datetime for pattern syntax
echo $fmt->format(new \DateTime());
If it doesn't work you might need to:
Install
intl
php extension (ubuntu example):sudo apt-get install php5-intl
Install the locale you want to use:
sudo locale-gen it_IT