PHP (PHP Hypertext Preprocessor)

Auteur: Mohamed CHINY Durée necessaire pour le cours de PHP (PHP Hypertext Preprocessor) Niveau recommandé pour le cours de PHP (PHP Hypertext Preprocessor) Supports vidéo non disponibles pour ce cours Exercices de renforcement disponibles pour ce cours Quiz disponible pour ce cours

Page 11: Dates et heures

Toutes les pages

Manipulation des dates et heures en PHP

PHP dispose de plusieurs fonctions qui permettent de manipuler les dates et les heures. Dans ce qui suit nous allons voir les fonctions les plus utiles.

Fonction date()

La fonction date() permet de retourner une chaîne de caractères ou une valeur booléenne (selon les paramètres qui lui sont passés). Dans le cas général, la fonction date() retourne des informations relatives à la date et l'heure courante. Cependant on peut toujours spécifier une date antérieure ou postérieure.

La fonction date() accepte deux paramètres:
  • Format: il s'agit d'une chaîne de caractères qui dicte le format à suivre pour afficher les informations relatives à la date et l'heure par le biais de caractères prédéfinis.
  • Timestamp: c'est un entier qui sert à indiquer la date et l'heure pour lesquelles on souhaite retourner les informations décrites par le format. Ce paramètre est facultatif. S'il n'est pas spécifié alors la fonction date() retournera les informations relatives à la date courante.

Exemple:
echo date("Y"); // Affiche 2016 (au moment de l’exécution)
echo date("d/m/Y"); // Affiche 06/01/2016 (au moment de l’exécution)
La fonction date() évalue le premier paramètre (format). Elle remplace les caractères prédéfinis par leurs valeurs et affiche les autres caractères tels qu'ils sont. La deuxième instruction du code précédent contient des slashs qui sont affichés tels qu'ils sont. Par contre, les autres caractères ont été remplacés par leur valeurs.

Voyons maintenant la liste des caractères prédéfinis pour la fonction date() et leur signification:
  • d: jour du mois sur deux chiffres. Sa valeur est comprise entre 01 et 31.
  • j: jour du mois sans zéro initial. Sa valeur est comprise entre 1 et 31.
  • w: jour de la semaine numérique compris entre 0 et 6 (0 pour dimanche, 1 pour lundi...)
  • z: jour de l'année compris entre 0 et 365 (0 étant le premier jour de l'année: le 1 janvier)
  • l: jour de la semaine en version longue en anglais (Monday, Tuesday...)
  • D: jour de la semaine en version abrégée en anglais (Mon, Tue...)
  • m: mois de l'année sur deux chiffres compris entre 01 et 12
  • n: mois de l'année sans zéro initial, compris entre 1 et 12
  • F: mois textuel en version longue en anglais (January, February...)
  • M: mois textuel en version abrégée en anglais (Jan, Feb...)
  • Y: année sur 4 chiffres
  • y: année sur 2 chiffres
  • h: heure au format 12h sur deux chiffres comprise entre 01 et 12
  • g: heure au format 12h sans zéro initial comprise entre 1 et 12
  • H: heure au format 24h sur deux chiffres comprise entre 00 et 23
  • G: heure au format 24h sans zéro initial comprise entre 0 et 23
  • i: minutes comprises entre 00 et 59
  • s: secondes comprises entre 00 et 59
  • a: Ante meridiem et post meridiem en minuscule (am ou pm)
  • A: Ante meridiem et post meridiem en majuscule (AM ou PM)
  • S: suffixe anglais pour les jours (st, nd, th)
  • t: nombre de jours dans un mois donné
  • Z: décalage horaire exprimé en seconde. Compris entre -43200 et 50400
  • L: dans ce cas une valeur booléenne sera retournée. Si l'année est bissextiles alors elle renvoie true sinon elle renvoie false.

On verra comment traiter une date antérieure ou postérieur plus bas dans cette page.

Fonction checkdate()

La fonction checkdate() permet de vérifier la validité d'une date. Si la date passée en paramètre est valide alors elle retourne true, sinon elle retourne false.

La syntaxe de la fonction checkdate() vérifie cette forme:

checkdate( mois , jour , année )

Exemple:
<?php
   if(checkdate(02,30,2016))
      echo "Date valide.";
   else
      echo "Date invalide.";
?>
Ce qui donne:
Date invalide
En effet, le mois de février ne peut pas contenir le jour 30.

Fonction time()

La fonction time() calcule le timestamp Unix en secondes. Cela représente le nombre de secondes écoulées depuis le 1 janvier 1970 à minuit jusqu'à l'instant actuelle. Cette date est prise comme référence car elle correspond à la date du lancement du premier système Unix. Certains préfèrent l'appeler Timestamp POSIX.

Exemple:
<?php
   echo time();
?>
Au moment où j'ai exécuté ce code j'ai eu:
1452120663

Fonction mktime()

La fonction mktime() calcule le timestamp Unix en secondes à partir du 1 janvier 1970 à minuit jusqu'à la date et l'heure spécifiés en paramètre.

La syntaxe de la fonction mktime() vérifie cette forme:

mktime( heure , minute , seconde , mois , jour , année )

Exemple:
<?php
   echo mktime(00,00,00,01,01,2016);
?>
Ce qui donne:
1451606400
En général le timestamp Unix est utilisé pour faire des opérations (addition ou soustraction) sur deux dates. Par exemple, si on souhaite connaitre combien de temps est écoulé entre une date de début et une date de fin, il suffit de calculer le timestamp de chacune des deux dates. Le résultat étant entier, il suffit de faire la soustraction entre les deux timestamp pour avoir le nombre de secondes écoulées de la date de début à la date de fin. Avec des opérations basiques on peut convertir la différence en heures ou en jours...

Manipuler une date antérieure ou postérieure avec la fonction date()

Jusqu'ici, nous avons vu comment extraire des informations sur la date et l'heure actuelle à l'aide de la fonction date() en manipulant son premier paramètre (format). Il est maintenant temps d'explorer son deuxième paramètre (timestamp).

Supposons qu'on veut connaitre le jour (en anglais) qui correspond à la date 01/01/2016. Dans ce cas il faut placer le timestamp relatif à cette date en guise de deuxième paramètre de la fonction date().

Le code ressemblera donc à ceci:
<?php
   echo date("l",mktime(00,00,00,01,01,2016));
?>
Ce qui donne:
Friday

Exemple d'application

Supposons maintenant que l'on veut afficher la date précédente sous la forme "Vendredi 1 janvier 2016" (ou n’importe quelle date en format francophone).

Le code que je propose est le suivant:
<?php
   $jour=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"
   );

   echo $jour[date("w",mktime(00,00,00,01,01,2016))].
   " ".
   date("j",mktime(00,00,00,01,01,2016)).
   " ".
   $mois[date("n",mktime(00,00,00,01,01,2016))].
   " ".
   date("Y",mktime(00,00,00,01,01,2016));
?>
Le code affiche:
Vendredi 1 février 2016