3
votes

afficher le nom du mois en français en php?

Je travaille sur un code php comme indiqué ci-dessous:

<?php if(ICL_LANGUAGE_CODE=='fr'){
setlocale(LC_TIME, 'fr_FR');
?>
<time datetime="<?php echo esc_attr(date_format($ts, 'H:i d-m-Y')) ?>"
   data-timezone="<?php echo esc_attr($tz_param) ?>"><?php echo strftime(esc_html(date_format($ts, 'F j  H:i'))) ?></time> // Line B
<?php } ?>

La ligne A renvoie la date suivante sur la page Web:

DateTime Object
(
    [date] => 2019-07-10 21:30:00.000000
    [timezone_type] => 3
    [timezone] => America/New_York
)
July 10  21:30

print_r ($ ts) imprime:

July 10 21:30

Énoncé du problème:

Je me demande quels changements je dois faire dans le code php ci-dessus à la ligne A ci-dessus pour que lorsque la page est en français , elle renvoie la date en français .

C’est ce que j’ai essayé , mais cela renvoie toujours la date en anglais .

<?php <time datetime="<?php  echo esc_attr(date_format($ts, 'H:i d-m-Y'))  ?>"
data-timezone="<?php  echo esc_attr($tz_param)  ?>"><?php echo esc_html(date_format($ts, 'F j  H:i')) ?></time> ?> // Line A 

La ligne B ci-dessus renvoie toujours l'anglais.


6 commentaires

Copie possible de changer le nom du mois en français


@GufranHasan pas vraiment. Cette question a différentes réponses qui sont applicables et mieux adaptées à cette instance particulière en raison du framework WordPress.


Mais aussi en utilisant les fonctions PHP strftime et setlocale .


Oui, et il y a des filtres dans WordPress qui peuvent parfois interférer avec les fonctions basées sur la date et l'heure. Il existe également d'autres normes qui devraient être appliquées pour s'adapter au cadre que vous utilisez.


Tout d'abord, date_format n'utilise pas de paramètres régionaux. la sortie est toujours en anglais, vous devez donc utiliser une autre méthode


Peut-être que votre serveur n'a pas de langue française installée, vous pouvez le vérifier en exécutant ce code -


6 Réponses :


3
votes

Utilisez strftime: http://php.net/manual/en/function. strftime.php

Carbon::setLocale('fr');
Carbon::yesterday()-> diffForHumans();

(pas sûr à ce sujet% d.% M.% Y mais vous pouvez lire la documentation)

OU utilisez le package Carbon

Localisation http://carbon.nesbot.com/docs/# localisation des api

<?php
setlocale(LC_TIME, "fr_FR");
echo strftime(" in French %d.%M.%Y and");


0 commentaires

2
votes

En supposant que la langue de base de votre site Web est le français, vous pouvez utiliser la fonction WordPress intégrée date_i18n () comme ceci:

$correct_date = get_date_from_gmt(date_format($ts, 'Y-m-d H:i:s')); //gets the date in your current timezone
echo date_i18n( 'F j  H:i', strtotime($correct_date) );

Si $ ts est en fait un objet date, vous devrez saisir l'horodatage d'abord comme ceci:

echo date_i18n( 'F j  H:i', $ts->getTimeStamp() ); //Assuming $ts is a dateTime object

Si vous êtes aux prises avec un décalage horaire (c'est-à-dire que l'heure retournée est de quelques heures en avance / en retard), vous devrez combiner la fonction avec get_date_from_gmt comme ceci:

XXX


12 commentaires

Quels changements dois-je apporter ici? echo esc_html (date_format ($ ts, 'F j H: i'))


echo date_i18n (esc_html (date_format ($ ts, 'F j H: i'))) ? Faites le moi savoir.


@flash vous pouvez remplacer cette ligne soit par echo date_i18n ('F j H: i', $ ts); soit par echo esc_html (date_i18n ('F j H: i', $ ts));


Son retour vide.


@flash pouvez-vous confirmer que $ ts affiche un horodatage réel? Si vous remplacez votre code par echo date_i18n ('F j H: i', '1562838798'); affiche-t-il la date d'aujourd'hui?


@flash également - pouvez-vous confirmer que la "Langue du site" de votre site Web dans vos paramètres généraux a été définie sur le français?


echo date_i18n ('F j H: i', '1562838798'); renvoie juillet 11 09:53


@flash alors il y a peut-être un problème avec votre variable $ ts ?


En effectuant print_r ($ ts) , il renvoie DateTime Object ([date] => 2019-07-10 16: 00: 00.000000 [timezone_type] => 3 [timezone] => Amérique / New_York)


@flash cela signifie que $ ts est un objet de date, pas un horodatage. Vous devriez alors pouvoir remplacer votre code par echo date_i18n ('F j H: i', $ ts-> getTimeStamp ());


Désolé pour le retard. Ce n'est pas le bon moment. Bien que ce soit le bon jour.


continuons cette discussion dans le chat .



1
votes

Référence de php doc

Remarque: La valeur de retour de setlocale () dépend du système que PHP exécute. Il renvoie exactement ce que la fonction système setlocale renvoie.

setlocale(LC_ALL, 'fr_FR');

echo strftime("%A %e %B %Y", mktime(0, 0, 0, 12, 22, 1978)); //vendredi 22 d�cembre 1978


0 commentaires

3
votes

Vous devez utiliser une extension intl :

$ts = new DateTime();
$formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::LONG);
$formatter->setPattern('MMMM d  HH:mm');

echo $formatter->format($ts);

Les formats disponibles pour setPattern sont répertoriés ici


5 commentaires

es-tu dans le coin?


La page lance une erreur sur cette ligne echo $ formatter-> format ($ ts);


Êtes-vous là? Faites le moi savoir.


C'est un site WordPress. Il affiche Page de rendu d'erreur . Mais ça marche bien jusqu'à cette ligne $ formatter-> setPattern ('MMMM d HH: mm');


Dès que j'utilise ce format echo $ formatter-> ($ ts); cela ne fonctionne pas.



0
votes

contourne le problème:

<?php 
if (date("m", time() ) === "01" ) { print "Janvier"; }
if (date("m", time() ) === "02" ) { print "Février"; }
if (date("m", time() ) === "03" ) { print "Mars"; }
if (date("m", time() ) === "04" ) { print "Avril"; }
if (date("m", time() ) === "05" ) { print "Mai"; }
if (date("m", time() ) === "06" ) { print "Juin"; }
if (date("m", time() ) === "07" ) { print "Juillet"; }
if (date("m", time() ) === "08" ) { print "Août"; }
if (date("m", time() ) === "09" ) { print "Septembre"; }
if (date("m", time() ) === "10" ) { print "Octobre"; }
if (date("m", time() ) === "11" ) { print "Novembre"; }
if (date("m", time() ) === "12" ) { print "Décembre"; }
?>

J'ai essayé d'utiliser le processus setlocale () et j'ai eu le même problème que vous. L'impression était toujours en anglais. C'est peut-être une solution «à l'ancienne», mais c'est simple et ça marche.


2 commentaires

date () n'écoutera jamais les paramètres régionaux. strftime () le fera cependant. :)


@Qirel J'ai essayé strftime () avec setlocale () comme suggéré dans le manuel PHP . J'ai eu les mêmes problèmes que l'OP, cela n'a pas fonctionné. Cette volonté.



0
votes

Depuis http://php.net/manual/en/function.date. php :

To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().


0 commentaires