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

ventouse
Invité n'ayant pas de compte PHPfrance

15 déc. 2006, 16:52

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.

Eléphant du PHP | 86 Messages

15 déc. 2006, 17:01

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
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D

ventouse
Invité n'ayant pas de compte PHPfrance

15 déc. 2006, 17:19

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 !

ViPHP
ViPHP | 1961 Messages

15 déc. 2006, 17:22

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"
Modifié en dernier par Ajoloca le 15 déc. 2006, 17:23, modifié 1 fois.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

15 déc. 2006, 17:22

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é). ;)

Eléphanteau du PHP | 24 Messages

16 déc. 2006, 15:48

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.

ViPHP
ViPHP | 1961 Messages

16 déc. 2006, 16:08

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 :?:
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 1961 Messages

16 déc. 2006, 16:34

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 ;
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 224 Messages

16 déc. 2006, 18:03

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"

;)
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)