PHP Jour et mois en français à partir d'une date notée n'importe comment
je 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
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
Plus une function ou variable ne commence par une majuscule :)
Elle ne te plaît pas ma solution plus courte ? ;-)
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'
);
Arf ;-)