TUTORIELS 
Manipulation de la date avec PHP

Page 1 | 2

Elémentaire, mon cher Watson, l'affichage de la date ? Opération basique, certes, mais qui s'assortit d'une multitude d'options qu'il est préférable de manipuler correctement.
 (15 septembre 2003)
 

PHP dispose en standard d'une foultitude de fonctions : une caractéristique qui a fait beaucoup pour son adoption rapide. Seulement, il n'est pas toujours facile d'aller plus loin, et notamment de "forcer" certaines fonctions à agir comme on le voudrait. Pour illustrer cet état de fait, nous nous penchons ici spécifiquement sur les fonctions de gestion de date.

Afficher la date
Il s'agit simplement d'afficher une date au format 01/02 ou 01/02/03. La fonction date() nous ouvre plusieurs options, et nous n'avons qu'à choisir parmi elles.

Pour l'affichage des jours, nous pouvons aussi choisir entre "d" (de 01 à 31), "D" (de Mon à Sun - en anglais, donc), "j" (de 1 à 31), "l" (L minuscule - de Monday à Sunday) et "z" (0 à 365 - le jour de l'année).
Du choix aussi pour le mois : "F" (de January à December), "m" (de 01 à 12), "n" (de 1 à 12) et "M" (de Jan à Dec).
Enfin, l'année, plus simple : "y" (03) ou "Y" (2003).
Ensuite, la "mise en page" de la date se fait en combinant les diverses options :
2003-09-12 : <?=date("Y-m-d");?>
12/09/2003 : <?=date("d/m/Y");?>
Le 12/09 : <?=date("\L\e d/m");?>
Nous sommes le 12 du 9e mois de l'année 2003 :
<?="Nous sommes le " . date("d") . " du " . date("n") . "e mois de l'année " . date("Y");?>

En renvanche, il est difficile d'afficher la date complète - nos "mardi" et "décembre" habituels se trouvent imprimé en anglais :
<?="Nous sommes le " . date("l j F Y");?> donnera "Nous sommes le Friday 12 September 2003", ce qui n'est pas vraiment ce que l'on peut attendre.

Afficher la date complète en français
Il nous faut travailler un peu plus pour afficher la date en bon français, et donc créer une fonction qui remplacera complètement date(). Voici une fonction qui prend en argument le jour (deux chiffres), le mois (deux) et l'année (quatre) et renvoi la date correctement formatée :

function datefr($jj, $mm, $aaaa)
  {
  $userDate = mktime(0,0,0,$mm,$jj,$aaaa);
  $jours = array('dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi');
  $mois = array('', 'janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre');
  return $jours[date("w", $userDate)] . " " . $jj . " " .   $mois[date("n", $userDate)] . " " . $aaaa;
  }

Explications :
La fonction mktime() ne permet de "créer" une date, c'est-à-dire de définir (et conserver) un "timestamp" d'un moment choisi, dans le passé comme le futur. Un timestamp un nombre correspondant au nombre de secondes s'étant écoulé entre la date donnée et le 1er janvier 1970 (début de l'époque UNIX). Les arguments de la fonction prennent en compte la date américaine, donc il faut faire attention à bien placer ses valeurs : mktime(heure,minute,seconde,mois,jour,annee).
date(w) renvoi le numéro du jour de la semaine, 0 correspondant à dimanche et 6 à samedi (des données destinées à notre tableau $jours qui place dimanche à l'index 0).
Pour le mois, nous nous servons directement du numéro du mois (de 1 à 12), c'est pourquoi notre tableau $mois commence par un champ vide, "janvier" étant placé à l'index 1.
Nous renvoyons ensuite directement la ligne finale.

Résultat :
<?=datefr(21,04,1977);?> donnera "jeudi 21 avril 1977"
<?="Nous sommes le " . datefr(date(d),date(m),date(Y));?> donnera "Nous sommes le vendredi 12 septembre 2003".

Page 1 | 2

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page