Aide passage date en français

Eléphant du PHP | 153 Messages

06 nov. 2007, 16:25

Bonjour à tous,

J'ai un script qui utilise une fonction pour afficher des dates, mon soucis c'est que cette date est sous la forme 06 November 2007 et je souhaiterais l'avoir sous la forme 06 novembre 2007, le mois en français quoi :)

Voici les éléments de la base de données :
La date sera affichée sous la forme "d F Y H:i:s"
La date à transformer sous la forme "1189626996"

Le code qui affiche la date :
show_date($item_details['start_time']);
Où "start_time" = "1189626996"

La fonction de transformation :
function show_date ($timestamp, $show_time = true)
{
	(string) $display_output = null;

	if ($timestamp)
	{
		$date_format = ($show_time) ? DATETIME_FORMAT : DATE_FORMAT;

		$offset_time = $timestamp + (TIME_OFFSET * 60 * 60);

		$display_output = date($date_format, $offset_time);
	}
	else
	{
		$display_output = GMSG_NA;
	}
	return $display_output;  
}
Je ne vois pas où je peux agir pour modifier le mois et le passer de l'anglais au français ?

Merci pour votre aide :)

Mammouth du PHP | 536 Messages

06 nov. 2007, 16:26

polurquoi ne pas utiliser la fonction
date("d-m-Y");
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Eléphant du PHP | 153 Messages

06 nov. 2007, 16:34

Oui, mais alors plutôt
date("d F Y");
Mais ça ne résoud pas mon problème de traduction :)

Mammouth du PHP | 881 Messages

06 nov. 2007, 16:36

Je n'ai pas trouvé de solution au même problème, mais je contourne le noeud de la manière suivante:
  $mois = explode(" ", "Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre");

  $affiche = date("d", $DateRecue)." "$mois[date("m", $DateRecue)]." ".date("Y", $DateRecue);
C'est pas génial, mais ça donne le résultat escompté.
Soyez artisans de paix

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 nov. 2007, 16:57

Pour formater des dates dans d'autres langues, utilisez les fonctions setlocale() et strftime() au lieu de la fonction date().
Quand tout le reste a échoué, lisez le mode d'emploi... ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

d0m
Mammouth du PHP | 1141 Messages

06 nov. 2007, 16:58

Tu peux construire une fonction :
function mois_fr($num_mois){
  switch($num_mois){
    case 0 : return 'Janvier';break;
    ....
    case 12 : return 'Décembre';break;
    default : return false;break;  
  }
}
*edit : merci Ryle je ne connaissais pas

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 nov. 2007, 17:09

@Patriboom : plutôt que de faire une chaine de mois et un explode (ou un switch pour d0m :)), tant qu'à faire, déclare directement un tableau, c'est quand même plus propre :)
$libMois = array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'); 
echo $libMois[$numMois-1];
Tu peux même l'indexer à partir de 1 pour éviter le -1 :
$libMois = array(1=>'Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'); 
echo $libMois[$numMois];
Mais sinon setlocale() et strftime() ;)

Pis une p'tite remarque en passant sur le switch, dès lors que tu fais un return dans un case, le break n'est plus utile (bon, ça vaut peut être mieux de le mettre pour garder l'habitude et ne pas l'oublier, mais le fait de retourner une valeur fait de toute façon quitter le switch :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 153 Messages

06 nov. 2007, 17:20

Bon ben, ze suis à la ramasse, complet :?

Concernant setlocale() et strftime() je suis allé voir, mais je n'y comprend rien :lol:

D'autre part, la valeur de $timestamp peut me retourner soit une date sous la forme 06 november 2007 16:15:25 ou simplement 06 november 2007 (en fonction de ce qui est indiqué dans $timestamp), je pense que c'est pour cette raison qu'il y a :
$date_format = ($show_time) ? DATETIME_FORMAT : DATE_FORMAT;
Par contre, je n'arrive pas à trouver ces 2 fonctions DATETIME_FORMAT et DATE_FORMAT, sinon j'aurais peut-être pu agir directement sur elles.

Bon, je vais encore tripatouiller le code :D

Merci à vous :wink:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 nov. 2007, 17:39

Ce ne sont pas des fonctions mais des constantes :) Donc selon si ta variable $showtime est vraie ou pas tu vas affecter une valeur ou l'autre à $date_format (qu'il te suffit d'afficher si tu veux voir la différence sans avoir à chercher dans la doc)

Concernant strftime(), pourquoi ne pas essayer l'exemple donné et voir le résultat ? cela t'aidera à comprendre comment cela fonctionne :)
<?php
setlocale(LC_TIME, "C");
echo strftime("%A");
setlocale(LC_TIME, "fi_FI");
echo strftime(" in Finnish is %A,");
setlocale(LC_TIME, "fr_FR");
echo strftime(" in French %A and");
setlocale(LC_TIME, "de_DE");
echo strftime(" in German %A.\n");
?> 
Il ne te reste plus ensuite qu'à renseigner le second paramètre avec ton timestamp et modifier le format pour obtenir le mois au lieu du jour de la semaine :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 153 Messages

06 nov. 2007, 18:05

J'ai remplacé %A par %B
Et j'ai ça chez moi :
November in Finnish is November, in French November and in German November.
Il doit me manquer quelque chose, non ? :lol:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 nov. 2007, 18:12

ah bah euh.. ouais... vraissemblablement :)

Et si tu remplaces LC_TIME par LC_ALL ?

sinon bah il doit te manquer l'option français dans la conf du système....
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 153 Messages

06 nov. 2007, 19:27

Pas mieux :?

Effectivement, il doit me manquer quelque chose :lol:

Eléphant du PHP | 61 Messages

07 nov. 2007, 02:15

Salut, moi j'avais fais ça avec un array très simple ^^ comme Ryle
<?php
$temps = time();

// JOURS
$jours = array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
$jours_numero = date('w', $temps); // Numero du jour dans la SEMAINE
$jours_complet = $jours[$jours_numero];
// Numero du jour
$NumeroDuJour = date('d', $temps); // Numero du jour dans le MOIS


// MOIS
$mois = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai',
'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
$mois_numero = date("m", $temps); // Numero du mois dans L'ANNEE
$mois_complet = $mois[$mois_numero];

// ANNEE
$annee = date("Y", $temps); // Année (2007, 2008...)

// Affichage DATE
echo $jours_complet . $NumeroDuJour . $mois_complet . $annee;
Aurevoir et bon courage ;)
Site sur THEOPERATION M.D. -> Nouvelle version (100%)
Ton code, tu indenteras; et le bohneur, tu feras.

Eléphant du PHP | 153 Messages

07 nov. 2007, 11:53

Voila, j'ai modifié la fonction show_date() :
function show_date ($timestamp, $show_time = true)
{
	(string) $display_output = null;
	
	$mois_fr = Array(1=>'janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre');
	$affiche_date = date('d', $timestamp)." ".$mois_fr[date('F', $timestamp)]." ".date('Y', $timestamp);
	$affiche_datetime = date('d', $timestamp)." ".$mois_fr[date('F', $timestamp)]." ".date('Y', $timestamp)." ".date('H:i:s', $timestamp);
	
	if ($timestamp)
	{
		$date_format = ($show_time) ? $affiche_datetime : $affiche_date;

		$offset_time = $timestamp + (TIME_OFFSET * 60 * 60);		

		$display_output = date($date_format, $offset_time);
	}
	else
	{
		$display_output = GMSG_NA;
	}
	return $display_output;  
}
J'ai remplacé les 2 constantes DATETIME_FORMAT et DATE_FORMAT respectivement par $affiche_datetime et $affiche_date, pour pouvoir me servir du tableau des mois en français.

Malheureusement je me retrouve avec cet affichage "07 2007 10:44:42" (par exemple), il me manque le mois "novembre" ! :roll:

Mammouth du PHP | 693 Messages

07 nov. 2007, 12:05

F renvoie le nom du moi en anglais. COmme ton tableau est initialisé sur le numéro du omi, il faut que tu remplace F par n, pour avoir le numéro sans zéro intial.