PHP Jour et mois en français à partir d'une date notée n'importe comment

calendrier1.jpgje viens de m'énerver entre les mktime(), les date(), la locale du serveur, la locale de PHP etc... et je ne vous parle même pas de la gestion des dates en javascript que j'ai abandonné...

Note: La solution de Zigazou dans les commentaires est plus classique VV

Ma solution la plus simple était d'écrire ces functions 'pour ne pas etre dépendant des locales du serveur et du navigateur:

function jourDeLaSemaine($stringFormat,$stringDate)
{
		$jours=array(
			'0'	=>'Dimanche',
			'1'	=>'Lundi',
			'2'	=>'Mardi',
			'3'	=>'mercredi',
			'4'	=>'Jeudi',
			'5'	=>'Vendredi',
			'6'	=>'Samedi'
		);
		$tempdate=DateTime::createFromFormat($stringFormat,$stringDate);
		$temptimestamp=mktime($tempdate ->format('H'),$tempdate ->format('i'),$tempdate ->format('s'),$tempdate ->format('n'),$tempdate ->format('j'),$tempdate ->format('Y'));
		return($Jours[date('w',$temptimestamp)]);
}
function moisDeLAnnee($stringFormat,$stringDate)
{
		$mois=array(
			'1'	=>'janvier',
			'2'	=>'fevrier',
			'3'	=>'mars',
			'4'	=>'avril',
			'5'	=>'mai',
			'6'	=>'juin',
			'7'	=>'juillet',
			'8' 	=>'aout',
			'9'	=> 'septembre',
			'10'	=> 'octobre',
			'11'	=> 'novembre',
			'12'	=> 'decembre'
		);
		$tempdate=DateTime::createFromFormat($stringFormat,$stringDate);
		$temptimestamp=mktime($tempdate ->format('H'),$tempdate ->format('i'),$tempdate ->format('s'),$tempdate ->format('n'),$tempdate ->format('j'),$tempdate ->format('Y'));
		return($mois[date('n',$temptimestamp)]);
}

Ça se voit tant que ça que j'ai craqué???

Par exemple pour avoir le jour de la semaine de $dateTotest qui est un string au format 'j-n-Y' :

$stringJour=jourDeLaSemaine('j-n-Y',$dateTotest);

Commentaires

1. Le mardi, mai 31 2011, 21:12 par zigazou

Allez hop ! Je fais mon chieur ! Ça faisait longtemps ;-)

En notation CamelCase, tes noms de fonctions devraient commencer par une minuscule (MoisDelAnnee…), tout comme tes noms de variables ($Mois…).

Tu devrais placer le mot-clé "static" devant l’initialisation de tes variables $Jours et $Mois, comme ça elles ne seront initialisées qu’une seule fois pour toute l’exécution du script appelant tes fonctions (optimisation).

La plupart de tes variables manquent d’un standard de programmation et devraient être plus explicites.

Pour la première fonction, les lignes ci-dessous ne ressembleraient-elles pas à ce que tu recherches ?

setlocale(LC_ALL,"fr_FR.utf8"); // À exécuter à l’initialisation du script et pas d’une fonction
print strftime('%A',date_create_from_format('j-m-Y','31-05-2011')->getTimeStamp());

@+

Frédéric

2. Le mardi, mai 31 2011, 21:39 par gnieark

Plus une function ou variable ne commence par une majuscule :)

3. Le mardi, mai 31 2011, 21:58 par zigazou

Elle ne te plaît pas ma solution plus courte ? ;-)

4. Le mardi, mai 31 2011, 22:08 par gnieark

si si, mais la mienne est me permet de faire des originalités dans les noms de jours:

$jours=array(
'0' =>'Dimanche. vous travillez comme des gros manches',
'1' =>'Lundi. le week end c'est fini',
'2' =>'Mardi demain c'est mercredi',
'3' =>'mercredi c'est permis',
'4' =>'Jeudi Non non c\'est pas férié, encore deux jours',
'5' =>'Vendredi poudipoudi',
'6' =>'Samedi, l\'informaticien est parti'
);

5. Le mardi, mai 31 2011, 22:11 par zigazou

Arf ;-)

Page top