Page 1 sur 1

Méthode élégante pour transofrmer un mois (nombre) en texte

Posté : 15 déc. 2006, 16:52
par ventouse
Hello,

J'ai une variable dans laquelle j'ai un mois enregistré genre 11 pour novembre, 03 pour mars. J'aimerais savoir quelle méthode "élégante" je pourrais utiliser pour transformer ce nombre en texte. j'ai pensé à un switch qui passe les 12 mois en revue mais c'est hyper débile à mon avis. Et je ne connais pas trop les fonctions de date alors si quelqu'un a uné méthode élégante (et donc simple) je suis super preneur !
Merci d'avance.

Posté : 15 déc. 2006, 17:01
par tinou
tu aurais regarder dans les 10 premier topic de la premiere page, (30s a tout casser) tu aurais vu absolument le meme probleme que toi.

J'ai cherché pour toi, va voir ici

Posté : 15 déc. 2006, 17:19
par ventouse
ermm effectivement désolé... merci pour l'indication. Je pensais aussi utiliser un tableau mais je croyais qu'il existerait une fonction pour cela. Merci !

Posté : 15 déc. 2006, 17:22
par Ajoloca
Bonjour.
ermm effectivement désolé... merci pour l'indication. Je pensais aussi utiliser un tableau mais je croyais qu'il existerait une fonction pour cela. Merci !
En effet il existe, à mon gout, plus élégant
Un exemple
<?php
	setlocale(LC_ALL, 'fr_FR'); 
	echo "<b>du</b> "; 
	$jour1="01"; 
	$mois1="01"; 
	$year1="2007"; 
	echo strftime("%A %e %B %Y", mktime(0, 0, 0,$mois1 ,$jour1 ,$year1)); 
	echo " <b>au</b> "; 
	$jour2="10"; 
	$mois2="01"; 
	$year2="2007"; 
	echo strftime("%A %e %B %Y", mktime(0, 0, 0,$mois2,$jour2,$year2));
?>
Ce qui te permets d'utiliser n'importe quelle langue en ne modifiant que la "locale"

Posté : 15 déc. 2006, 17:22
par albat
Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton [Mettre Résolu] qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié). ;)

Posté : 16 déc. 2006, 15:48
par iptima
Post Scriptum

Bonjour,

Personnellement, j'utilse la syntaxe proposée par Ajoloca mais, quitte à être élégant, autant l'être jusqu'au bout. Ainsi convient-il, selon moi, pour un affichage en français, de ne pas afficher 01 décembre 2006 mais 1er décembre 2006 et de ne pas afficher 02 décembre 2006 mais 2 décembre 2006, et ainsi de suite...

Voici ma syntaxe, perfectible (pour une fois que je peux contribuer à une discussion :langue:) :
setlocale(LC_TIME, 'french'); 
{
$jour = strftime('%A', time());  
$quantieme = strftime('%d', time());
$mois = strftime('%B', time());
$annee = strftime('%Y', time());
switch ($quantieme)
{
case '01':
$quantieme = '1er';
break;
case '02':
$quantieme = '2';
break;
case '03':
$quantieme = '3';
break;
case '04':
$quantieme = '4';
break;
case '05':
$quantieme = '5';
break;
case '06':
$quantieme = '6';
break;
case '07':
$quantieme = '7';
break;
case '08':
$quantieme = '8';
break;
case '09':
$quantieme = '9';
break;
}
print ''.$jour .' '.$quantieme.' '.$mois.' '.$annee.'';
}
Cordialement,

I.

Posté : 16 déc. 2006, 16:08
par Ajoloca
Bonjour,

Si tu veux. Mais dans ce cas utilise un tableau au lieu d'un case, plus simple, plus lisible et plus rapide. Que demande le peuple :?:

Posté : 16 déc. 2006, 16:34
par Ajoloca
Re,

Encore plus propre
setlocale(LC_TIME, 'french'); 
$jour = strftime('%A', time());  
$quantieme = strftime('%d', time()) == '01' ? '1er' : (int) strftime('%d', time();
$mois = strftime('%B', time());
$annee = strftime('%Y', time());
print $jour .' '.$quantieme.' '.$mois.' '.$annee ;

Posté : 16 déc. 2006, 18:03
par FredoMkb
Bonjour...

Voici une autre piste possible :
setlocale(LC_ALL, 'fr_FR'); 
$dateList = array(date('m'), date('d'), date('Y'));
if (intval($dateList[1]) <> 1) { $suffixe = ''; } else { $suffixe = 'er'; }
echo strftime("Le %A %e".$suffixe." %B %G", mktime(0, 0, 0, $dateList[0], $dateList[1], $dateList[2])); 
Si par exemple la variable "$dateList" retourne une liste "('11', '01', '2006')", le résultat serait "Le Mercredi 1er novembre 2006"

;)