2015-09-04 3 views
2

Dans mon projet, j'ai la date en anglais enregistrée dans la base de données comme 'Y-m-d'. Maintenant, je veux montrer la date en langue espagnole dans le format du 28 mai 2015. Comment vais-je le faire? J'ai essayé ce qui suit, mais en vain.comment changer la date de l'anglais vers l'espagnol en php?

setlocale(LC_TIME, 'spanish'); 
echo utf8_encode(strftime("%d %B, %Y",strtotime($date))); 

Lorsque j'imprime setlocale, il retourne bool (false) .est-il une autre façon de le faire?

+0

Je pense que la date simple et strtotime résoudra ce –

+1

setlocale (LC_TIME, 'es_ES'); ' – Zl3n

Répondre

-1

Cela devrait fonctionner:

echo date("d M, Y", strtotime($date)); 
+0

Une locale non prise en charge a été utilisé dans la question, ce qui a donné lieu à une valeur de retour' false' de l'OP comme indiqué dans le manuel de ['setlocale()'] (http://php.net/manual/fr/function.setlocale.php#refsect1-function.setlocale-returnvalues) – fyrye

0

Vous devez utiliser ceci:

setlocale(LC_TIME, 'es_ES'); 

// or (to avoid utf8_encode) : setlocale(LC_TIME, 'es_ES.UTF-8'); 
0

Je suggère en utilisant la bibliothèque de fonctions à la place intl, telles que IntlDateFormatter. Ce qui vous permettra de produire des données localisées sans avoir besoin de changer les paramètres régionaux globaux avec setlocale().

La bibliothèque Intl peut également vous permettre d'afficher une liste des paramètres régionaux pris en charge, vous pouvez utiliser var_dump(ResourceBundle::getLocales(''));

Exemple:. https://3v4l.org/BKCRo(remarquez comment setlocale(LC_ALL, 'es_ES') n'a pas d'effet sur la sortie

$esDate = datefmt_create('es_ES', //output locale 
    \IntlDateFormatter::FULL, //date type 
    \IntlDateFormatter::NONE, //time type 
    'America/Los_Angeles', //time zone 
    IntlDateFormatter::GREGORIAN, //calendar type 
    'dd LLLL, YYYY'); //output format 
echo $esDate->format(new \DateTime); 

Résultat :

18 diciembre, 2017 

Pour obtenir la liste des formats de date pris en charge patt Erns voir: http://userguide.icu-project.org/formatparse/datetime


Comme une note pour setlocale(), chaque système est différent et pas tous les paramètres régionaux peuvent être pris en charge par votre distribution de PHP et le système d'exploitation du serveur.

Lors de l'utilisation de Linux, vous pouvez utiliser locale -a depuis un terminal de console ou system('locale -a', $locales); var_dump($locales); depuis PHP, pour déterminer les paramètres régionaux pris en charge. Lorsque vous utilisez Windows, vous pouvez afficher les paramètres régionaux pris en charge par le système en accédant au Control Panel->Language ou au Control Panel->International Settings. Voir https://msdn.microsoft.com/en-us/library/cc233982.aspx pour plus de détails sur les paramètres régionaux pris en charge pour différentes versions de Windows. Si vous utilisez setlocale(), assurez-vous de fournir toutes les variantes possibles dans un tableau des paramètres régionaux souhaités, par ordre de priorité de gauche à droite, afin de réduire la probabilité de retour false.

par exemple.

setlocale(LC_TIME, array('es_ES.UTF-8', 'es_ES', 'es-ES', 'es', 'spanish', 'Spanish'));