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 Réponses :
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");
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
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 .
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
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
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.
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.
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 a>. J'ai eu les mêmes problèmes que l'OP, cela n'a pas fonctionné. Cette volonté.
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().
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
etsetlocale
.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 - Php $ result = setlocale (LC_ALL, 'fr_FR'); if ($ result === false) {throw new \ RuntimeException ('Erreur lors du changement de paramètres régionaux, vérifiez si les paramètres régionaux sont installés sur le système'); }