J'ai un objet DateTime que je forme actuellement via
$mytime->format("D d.m.Y")
Ce qui me donne exactement le format dont j'ai besoin:
Mar 5.3.2012
Le seul point manquant est la langue correcte. J'ai besoin d'une traduction allemande de Tue
(Tuesday
), qui est Die
(Dienstag
).
Cela me donne le bon paramètre local
Locale::getDefault()
Mais je ne sais pas comment dire DateTime::format
pour l'utiliser.
N'y a-t-il pas moyen de faire quelque chose comme:
$mytime->format("D d.m.Y", \Locale::getDefault());
C'est parce que format
ne fait pas attention aux paramètres régionaux. Vous devez utiliser strftime
à la place.
Par exemple:
setlocale(LC_TIME, "de_DE"); //only necessary if the locale isn't already set
$formatted_time = strftime("%a %e.%l.%Y", $mytime->getTimestamp())
Vous pouvez utiliser l'extension Intl pour formater la date. Il formatera les dates/heures en fonction des paramètres régionaux choisis, ou vous pouvez remplacer cela avec IntlDateFormatter::setPattern()
.
Un exemple rapide d'utilisation d'un modèle personnalisé, pour le format de sortie souhaité, pourrait ressembler.
$dt = new DateTime;
$formatter = new IntlDateFormatter('de_DE', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT);
$formatter->setPattern('E d.M.yyyy');
echo $formatter->format($dt);
Qui sort les éléments suivants (pour aujourd'hui, au moins).
Di. 4.6.2013
Modifier : Ahh boo! A répondu à une question ancienne parce que certains commentaires l'ont fait monter dans la liste! Au moins, l'option Intl est mentionnée maintenant.