GNT sans publicité, site mobile, fonctionnalitées exclusives...

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)
Lire les 16 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
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)
Publicité
Suivre les réponses
Poster une réponse
Anonyme