php : conversion datetime en français ???

Le
unbewusst.sein
comme le groupe "fr.comp.lang.php" semnle mortibus, je poste ici au cas


j'ai besoin d'afficher des datetimes avec php, dans ma base le format
est ISO, je converti pour obtenir :

Tue, 05 Jul 2011 15:37:49 +0200

je préférerais avoir ça en french )))

il faut le faire soi même ou bien existe t'il une manip, à partir de
locale ou autre qui converti dans la langue par défaut de la bécanne ???

--
« L'humanité qui devrait avoir six mille ans d'expérience,
retombe en enfance à chaque génération. »
(Tristan Bernard)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Vincent
Le #23691781
Le 27/08/2011 14:06, Une Bévue a écrit :
Tue, 05 Jul 2011 15:37:49 +0200
je préférerais avoir ça en french )))



Kekchozcomssa ?

<?php

//on récupère le jour, le mois et l'année grâce à la fonction date()

$jour = date("d");
$mois = date("n");
$annee = date("Y");
$joursemaine = date("w");
//on crée un tableau à une dimension contenant les noms de mois

$moisfrancais = array ( 1 => "Janvier", "Février", "Mars", "Avril",
"Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre",
"Décembre");
$joursemainefrancais = array (0 => "Dimanche", "Lundi", "Mardi",
"Mercredi", "Jeudi", "Vendredi", "Samedi");

// 1=> indique que le tableau commence à 1 (alors qu'un tableau commence
par défaut à 0)

//affichage de la date
echo "<br />";
echo "Nous sommes le : ";
echo "$joursemainefrancais[$joursemaine] " ;
echo "$jour ";
echo "$moisfrancais[$mois] ";
echo "$annee ";

?>
unbewusst.sein
Le #23693281
Vincent
Le 27/08/2011 14:06, Une Bévue a écrit :
> Tue, 05 Jul 2011 15:37:49 +0200
> je préférerais avoir ça en french )))

Kekchozcomssa ?

<?php

//on récupère le jour, le mois et l'année grâce à la fonction date()

$jour = date("d");
$mois = date("n");
$annee = date("Y");
$joursemaine = date("w");
//on crée un tableau à une dimension contenant les noms de mois

$moisfrancais = array ( 1 => "Janvier", "Février", "Mars", "Avril",
"Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre",
"Décembre");
$joursemainefrancais = array (0 => "Dimanche", "Lundi", "Mardi",
"Mercredi", "Jeudi", "Vendredi", "Samedi");

// 1=> indique que le tableau commence à 1 (alors qu'un tableau commence
par défaut à 0)

//affichage de la date
echo "<br />";
echo "Nous sommes le : ";
echo "$joursemainefrancais[$joursemaine] " ;
echo "$jour ";
echo "$moisfrancais[$mois] ";
echo "$annee ";

?>



ah oui merci beaucoup donc, si j'ai bien compris, ça n'existe pas en
builtin comme dans d'autres langages.

bon, j'ai légérement modifier ton code pour utiliser une function :
<?php
header('Content-type: text/html; charset=utf-8');

function date2fr($adate) {
$moisfrancais = array ( 1 => "Janvier", "Février", "Mars",
"Avril", "Mai", "Juin", "Juillet", "Août",
"Septembre", "Octobre", "Novembre", "Décembre");
$joursemainefrancais = array (0 => "Dimanche", "Lundi", "Mardi",
"Mercredi", "Jeudi", "Vendredi", "Samedi");
$jour=$adate->format('d');
$mois=$moisfrancais[$adate->format('n')];
$annee=$adate->format('Y');
$joursemaine=$joursemainefrancais[$adate->format('w')];
return "$joursemaine $jour $mois $annee à
".$adate->format('H')."H".$adate->format('i:s');
}
function isodate2fr($isodatestring){
return date2fr(new DateTime($isodatestring));
}
$ctime=new DateTime('2011-07-05T15:37:49+02:00');
echo "$ctime=new DateTime('2011-07-05T15:37:49+02:00');<br />";
echo date2fr($ctime)."<br />";
echo "<br />";
echo "Créé le ".isodate2fr('2011-07-05T15:37:49+02:00').".<br />";
?>

ce qui me gène est que les tableaux $moisfrancais et
$joursemainefrancais sont recréés à chaque appel de la function
date2fr($adate) est)ce que ça peut se mettre en global ou qqc du genre ?


--
« Le vrai problème avec les menteurs est que l'on ne peut jamais
être certain qu'ils ne vont pas dire la vérité. »
(Kingsley Amis)
Jean-Francois Ortolo
Le #23693441
Le 28/08/2011 07:31, Une Bévue a écrit :

ce qui me gène est que les tableaux $moisfrancais et
$joursemainefrancais sont recréés à chaque appel de la function
date2fr($adate) est)ce que ça peut se mettre en global ou qqc du genre ?






Bonjour Monsieur

D'après mes cours d'Informatique qui datent de Mathusalem, les
variables locales à une fonction, sont placées dans la pile, qui elle
même, est dépilée à chaque retour de la fonction.

Donc, d'une part ces variables locales, n'existent strictement que
durant l'appel à la fonction. D'autre part, l'accès à ces variables
locales, se faisant dans la pile, sont plus rapides que des accès à des
variables de type externe, ou static.

Maintenant, est-ce que ce raisonnement est valable pour un langage
interprété comme le php... Je ne sais pas.

En fait... Je ne sais même pas, si le php est réellement uniquement
interprété, ou bien fait l'objet d'une compilation "just-in-time", ou
même une précompilation suivie d'une interprétation, comme c'est le cas
en Java.

Quant à Java, je suis plus que profondément nul en Java, vu que je
n'ai jamais pratiqué. ;)

La Javanaaaaaiiiiiisssseeee....

Bien à vous.

Amicalement.

Jean François Ortolo

--
Visitez mon site gratuit donnant des Statistiques,
Pronostics et Historiques Graphiques
sur les Courses de Chevaux:
http://www.pronostics-courses.fr
Dominique Ottello
Le #23694261
(Une Bévue) écrivait :

Tue, 05 Jul 2011 15:37:49 +0200
je préférerais avoir ça en french )))


J'avais donné une réponse, avec crosspost sur fr.comp.lang.php et fu2
sur dito, mais, a priori, ce n'est pas passé. Je republie uniquement
ici.

Effectuer la conversion par strftime()
http://fr2.php.net/manual/fr/function.strftime.php
en faisant un /setlocale(LC_TIME,'fr_FR);/ juste avant. (1) (2)

Il se peut que le résultat de strftime() soit iso-8859-1 alors que l'on
souhaite obtenir de l'utf-8, donc ;
$date_format = '%d %B %Y';
setlocale(LC_TIME,'fr_FR'');
$date = iconv('ISO-8859-1',
'UTF-8//TRANSLIT//IGNORE',strftime($date_format, $timestamp));

(1) La valeur 'fr_FR' peut être différente en fonction des serveurs,
pour s'affranchir de cet éventuelle problème, on peut mettre plusieurs
valeurs, la « bonne » valeur sera prise par le serveur :
setlocale(LC_TIME,'fr_FR','french','French_France.1252','fr_FR.ISO8859-1','fra');

(2) Pourquoi faire un setlocale() juste avant et pas une bonne fois pour
toutes ?
Comme il est écrit dans la documentation :
L'information locale est maintenue par processus, non par thread. Si
vous faites fonctionner PHP sur un serveur multi-threadé comme IIS ou
Apache sur Windows, vous pourriez obtenir des changements soudains des
configurations locales pendant qu'un script fonctionne, même si celui-ci
n'appelle jamais la fonction setlocale(). Ceci survient à cause des
autres scripts qui fonctionnent dans des threads différents du même
processus. Ces scripts changent les configurations locales dans le
processus au complet en utilisant la fonction setlocale().
--
Il vaut mieux ignorer où l'on est, et savoir qu'on l'ignore, que de se
croire avec confiance où l'on n'est pas. Jean Dominique Cassini.
Technologie aéronautique - http://ottello.net - Les anciens de Vilgénis
unbewusst.sein
Le #23694361
Dominique Ottello
J'avais donné une réponse, avec crosspost sur fr.comp.lang.php et fu2 sur
dito, mais, a priori, ce n'est pas passé. Je republie uniquement ici.



c'est quoi "dito" ???

Effectuer la conversion par strftime()
http://fr2.php.net/manual/fr/function.strftime.php en faisant un
/setlocale(LC_TIME,'fr_FR);/ juste avant. (1) (2)

Il se peut que le résultat de strftime() soit iso-8859-1 alors que l'on
souhaite obtenir de l'utf-8, donc ; $date_format = '%d %B %Y';
setlocale(LC_TIME,'fr_FR''); $date = iconv('ISO-8859-1',
'UTF-8//TRANSLIT//IGNORE',strftime($date_format, $timestamp));

(1) La valeur 'fr_FR' peut être différente en fonction des serveurs, pour
s'affranchir de cet éventuelle problème, on peut mettre plusieurs valeurs,
la « bonne » valeur sera prise par le serveur :
setlocale(LC_TIME,'fr_FR','french','French_France.1252','fr_FR.ISO8859-1',
'fra');

(2) Pourquoi faire un setlocale() juste avant et pas une bonne fois pour
toutes ? Comme il est écrit dans la documentation : L'information locale
est maintenue par processus, non par thread. Si vous faites fonctionner
PHP sur un serveur multi-threadé comme IIS ou Apache sur Windows, vous
pourriez obtenir des changements soudains des configurations locales
pendant qu'un script fonctionne, même si celui-ci n'appelle jamais la
fonction setlocale(). Ceci survient à cause des autres scripts qui
fonctionnent dans des threads différents du même processus. Ces scripts
changent les configurations locales dans le processus au complet en
utilisant la fonction setlocale().



OK, super, merci beaucoup pour toutes ces précisions !
Je n'ai pas iconv avec mon php5 mais je suppose que étant une extension,
je peux l'installer après coup, comme je viens de le faire pour xsl ???

-- Il vaut mieux ignorer où l'on est, et savoir qu'on l'ignore, que de se
croire avec confiance où l'on n'est pas. Jean Dominique Cassini.



pas mal cette citation, je l'ajoute aux miennes ;-)

--
« Il n'y a pas de hasards, il n'y a que des rendez-vous. »
(Paul Eluard)
Dominique Ottello
Le #23694581
(Une Bévue) écrivait :

> J'avais donné une réponse, avec crosspost sur fr.comp.lang.php et fu2 sur
> dito, mais, a priori, ce n'est pas passé. Je republie uniquement ici.

c'est quoi "dito" ???



dito : de même, idem, comme indiqué plus haut

donc ... avec crosspost sur fr.comp.lang.php et Followup-To sur
fr.comp.lang.php

Quant à iconv :
Avec PHP 5, cette extension est activée par défaut, cependant, elle peut
être désactivée en compilant PHP avec l'option --without-iconv.
Dans un phpinfo() cela se voit, par exemple, avec :
iconv
iconv support enabled
iconv implementation "libiconv"
iconv library version 1.11

- Remarque concernant fr.comp.lang.php
Le dernier message date du 31 juillet 2011.
Il semblerait que la démodération de ce groupe ait eu des répercussions
non souhaitées, comme la non publication des messages.

--
"Tarifs-Album" de MANUFRANCE de 1911 : "Note à l'attention de nos clients :
Mesdames et messieurs, sachez que la société MANUFRANCE ne vous vendra pas
1 franc ce qui lui coute 10 francs et que pour 1 franc vous n'en aurez
toujours que pour 1 franc". Dominique Ottello - http://www.ottello.net
unbewusst.sein
Le #23694681
Dominique Ottello
Effectuer la conversion par strftime()
http://fr2.php.net/manual/fr/function.strftime.php
en faisant un /setlocale(LC_TIME,'fr_FR);/ juste avant. (1) (2)

Il se peut que le résultat de strftime() soit iso-8859-1 alors que l'on
souhaite obtenir de l'utf-8, donc ;
$date_format = '%d %B %Y';
setlocale(LC_TIME,'fr_FR'');
$date = iconv('ISO-8859-1',
'UTF-8//TRANSLIT//IGNORE',strftime($date_format, $timestamp));



bon après avoir installé l'extension iconv de php5, j'ai réalisé un
premier essai, pas vraiment concluant, premier script avec iconv :
<?php
header('Content-type: text/html; charset=utf-8');
$date_format='%d %B %Y';
etlocale(LC_TIME,'fr_FR');
$date= iconv('ISO-8859-1',
'UTF-8//TRANSLIT//IGNORE',strftime($date_format));
echo $date."<br %>";
?>

sur le browser, ça donne :
28 août 2011

donc il y a un pb d'encodage (j'ai forcé UTF-8 sur le browser)
<?php
header('Content-type: text/html; charset=ISO-8859-1');
$date_format='%d %B %Y';
setlocale(LC_TIME,'fr_FR');
$date=strftime($date_format);
echo $date."<br %>";
?>
donc sans utilisation d'iconv, et là, boum !!!
tjs un problème d'encodage :
28 août 2011
exactement la même chose que tout à l'heure mais avec le browser réglé
sur iso-8859-1

Par contre OH, grande surprise, si je change le header du précédent
fichier, qui devient :
<?php
//header('Content-type: text/html; charset=ISO-8859-1');
header('Content-type: text/html; charset=utf-8');
$date_format='%d %B %Y';
setlocale(LC_TIME,'fr_FR');
$date=strftime($date_format);
echo $date."<br %>";
?>

et que je force mon browser à utf-8 j'obtiens oh, miracle :
28 août 2011
ce qui était recherché...

aurais-je installé iconv pour rien ???
en tk ça signifie que chez moi (php 5.3.6) strftime sort en utf-8 non
???

ce qui est plutôt uine bonne nouvelle pour moi qui n'utilise QUE cet
encodage...
du coup j'ai créé un autre fichier en ISO :

--
« La bouse de la vache est plus utile que les dogmes :
on peut en faire de l'engrais. »
(Mao Tsé-Toung / 1896-1976)
unbewusst.sein
Le #23694861
Dominique Ottello
dito : de même, idem, comme indiqué plus haut



OK


Quant à iconv :
Avec PHP 5, cette extension est activée par défaut, cependant, elle peut
être désactivée en compilant PHP avec l'option --without-iconv.
Dans un phpinfo() cela se voit, par exemple, avec :
iconv
iconv support enabled
iconv implementation "libiconv"
iconv library version 1.11




ben j'avais regardé mon info.php, pas d'iconv dedans...
mais je l'ai rajouté (inutilement d'ailleurs) entre-temps, cf mon fil
plus bas :
Message-ID:
(tout juste posté)

c'est tout de même plus élégant, comme solution avec strftime, un grand
merci !!!

- Remarque concernant fr.comp.lang.php
Le dernier message date du 31 juillet 2011.
Il semblerait que la démodération de ce groupe ait eu des répercussions
non souhaitées, comme la non publication des messages.



ouais, plus rien ne passe, un désaccord ???

--
« La bouse de la vache est plus utile que les dogmes :
on peut en faire de l'engrais. »
(Mao Tsé-Toung / 1896-1976)
Dominique Ottello
Le #23694921
(Une Bévue) écrivait :

aurais-je installé iconv pour rien ???
en tk ça signifie que chez moi (php 5.3.6) strftime sort en utf-8 non



Il ne faut pas faire joujou avec les encodages n'importe comment.

Il ne faut pas changer les entêtes qui DOIVENT correspondent au codage
réel des pages générées et on laisse - sauf cas très particulier - le
navigateur en mode de détection automatique.

Si strftime() « sort » en utf-8 et que tes pages sont iso-8859-1, il
suffit d'inverser la fonction de transcodage iconv() et si tes pages
sont utf-8, tu n'utilises pas la fonction iconv().

sur le browser, ça donne : 28 août 2011


Codage utf-8 sur pages iso-8859-1





--
Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Technologie aéronautique : http://aviatechno.free.fr (http://ottello.net)
Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr
unbewusst.sein
Le #23695151
Dominique Ottello
> aurais-je installé iconv pour rien ???
> en tk ça signifie que chez moi (php 5.3.6) strftime sort en utf-8 non

Il ne faut pas faire joujou avec les encodages n'importe comment.



euh, j'ai suivi un conseil qui supposait que strftime sortait de
l'SO-8859-1; d'où la converion iso -> utf-8.

Il ne faut pas changer les entêtes qui DOIVENT correspondent au codage
réel des pages générées et on laisse - sauf cas très particulier - le
navigateur en mode de détection automatique.



je n'ai forcé, au niveau browser, QUE parce qu'il y avait un problème.
l'en-tête envoyée par php correspondait à ce que je --croyais-- obtenir.

Si strftime() « sort » en utf-8 et que tes pages sont iso-8859-1, il
suffit d'inverser la fonction de transcodage iconv() et si tes pages
sont utf-8, tu n'utilises pas la fonction iconv().

> sur le browser, ça donne : 28 août 2011
Codage utf-8 sur pages iso-8859-1



pas du tout, dans un cas, avec transfo iconv, c'est la transfo qui
déconne, normal, je cherche à faire une transfo iso -> utf-8 quand je
file déjà à iconv de l'utf-8

le second cas c'est une page annoncée comme iso qui sort de l'utf-8
et là j'ai bien eu raison de forcer le navigateur à utf-8 ça m'a permis
de m'apercevoir que, contrairement à ce qui m'avait été annoncé,
strftime sort en utf-8.

du coup mon header annonce utf-8; je n'ai plus d'iconv et ça roule.


--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
Publicité
Poster une réponse
Anonyme