web-dev-qa-db-fra.com

Formatage de l'objet DateTime, en respectant Locale :: getDefault ()

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());
57
stoefln

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())
57
Jonathan

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.

110
salathe