Fidèle à ses habitudes, PHP propose un lot de fonctions permettant de manipuler les dates. Nous allons voir comment les utiliser efficacement.

1- Fonctions de base

Nous allons commencer par voir les fonctions de base.

La fonction date()

Retourne des informations sur la date (et/ou l'heure) selon le format spécifié.

chaine date (chaine format [, entier timestamp])

Le paramètre optionnel timestamp permet de spécifier la date à afficher.
Voici la liste des éléments du paramètre format :

ElémentDescription
a"am" (matin) ou "pm" (après-midi)
A"AM" (matin) ou "PM" (après-midi)
BSwatch Internet time
dJour, "01" à "31"
DTexte court du jour,en anglais (ex: "Fri")
FTexte du mois, en anglais (ex: "January")
gHeure, au format 12h, sans les zéros initiaux ("1" à "12")
GHeure, au format 24h, sans les zéros initiaux ("0" à "23")
hHeure, au format 12h ("01" à "12")
HHeure, au format 24h ("00" à "23")
iMinutes ("00" à "59")
I(i majuscule) - "1" si l'heure d'hivers est activée, ou "0" sinon.
jJour du mois sans les zéros initiaux ("1" à "31")
l('L' minuscule) - Texte du jour, en anglais (ex: "Friday")
LBooléen pour savoir si l'année est bisextile ("1") ou pas ("0")
mMois ("01" à "12")
MTexte court du mois, en anglais (ex: "Apr")
nMois sans les zéros initiaux ( "1" à "12")
sSecondes ("00" à "59")
SSuffixe ordinal d'un nombre, en anglais, sur deux lettres ("th", "nd")
tNombre de jour dans le mois donné ("28" à "31")
TFuseau horaire de la machine (ex: "MET")
UNombre de secondes depuis le 1er janvier 1970 (équivalent à time())
wJour de la semaine, numérique ("0" à "6")
YAnnée, sur 4 chiffres (ex: "1999")
yAnnée, sur 2 chiffres (ex: "99")
zJour de l'année ("0" à "365")
ZDécalage horaire en secondes ("-43200" à "43200")

Exemple :

  1. <?php
  2. echo date("d-m-Y"); // affiche par exemple "18-06-2003"
  3. ?>

La fonction time()

Retourne le nombre de secondes écoulées depuis le 1er janvier 1970 (GMT), couramment appelé "timestamp".

entier time(void);

Cette fonction est très souvent utilisée avec date(), setcookie() etc...

Exemple :

  1. <?php
  2. echo date("d-m-Y", time()+24*3600); // maintenant + 24 heures
  3. // autrement dit demain
  4. ?>

La fonction mktime()

Retourne le "timestamp" d'une date donnée.

entier mktime (entier heure, entier minute, entier seconde, entier mois, entier jour, entier annee [, entier ch_heure])

Cette fonction est également très souvent utilisée avec date(), setcookie() etc...

Attention : Faites quand même attention à l'ordre (assez exotique) des arguments.

Exemple :

  1. <?php
  2. // affiche la date du lendemain du 26/11/2000
  3. echo date("d-m-Y", mktime(0, 0, 0, 11, 26, 2000) + 24*3600);
  4. ?>

2- Les autres fonctions

La fonction strftime()

Similaire à la fonction date(), mais tiens compte des paramètres de langue du système (définis avec setlocale()).

chaine strftime (chaine format [, int timestamp])

Le paramètre optionnel timestamp permet de spécifier la date à afficher.
Voici la liste des éléments du paramètre format :

ElémentDescription
%aNom du jour, court (selon les paramètres locaux).
%ANom du jour, long (selon les paramètres locaux).
%bNom du mois, court (selon les paramètres locaux).
%BNom du mois, long (selon les paramètres locaux).
%cDate et heure (selon les paramètres locaux).
%CNuméro de siècle : année divisée par 100 et arrondie (00 à 99).
%dJour (00 à 31).
%DDate (équivalent à %m/%d/%y).
%eJour (" 1" à "31"). Les chiffres (1 à 9) sont précédés d'un espace.
%hIdentique à %b
%HHeure, sur 24 heures (00 à 23).
%IHeure, sur 12 heures (01 à 12).
%jJour de l'année (001 à 366).
%mMois (1 à 12).
%MMinute (00 à 60).
%nSaut de ligne.
%p"am" ou "pm", en fonction de l'heure.
%rHeure, au format AM et PM.
%RHeure, au format 24h.
%SSecondes (00 à 60).
%tTabulation.
%THeure courante (équivalent à %H:%M:%S).
%uJour de la semaine (1 à 7), avec 7 pour dimanche.
%UNuméro de semaine, avec le premier dimanche de l'année comme premier jour de la première semaine.
%VNuméro de semaine (01 à 53), tel que défini dans l'ISO 8601:1988. La première semaine est celle qui a au moins 4 jours dans l'année courante, et avec un lundi comme premier jour de la semaine.
%WNuméro de semaine, avec le premier lundi de l'année comme premier jour de la première semaine.
%wJour de la semaine (0 à 6), avec 0 pour dimanche.
%xAffichage de la date (selon les paramètres locaux).
%XAffichage de l'heure (selon les paramètres locaux).
%yAnnée, sur deux chiffres (00 à 99).
%YAnnée, sur quatre chiffres.
%ZFuseau horaire.
%%Caractère % .

Exemple :

  1. <?php
  2. setlocale(LC_TIME, "fr");
  3. echo strftime("%A %d %B"); // affiche : "samedi 26 juillet"
  4. ?>

La fonction microtime()

Retourne le nombre de secondes (avec les microsecondes) écoulées depuis le 1er janvier 1970.

chaine microtime(void);

Attention, cette fonction retourne le résultat sous une forme assez exotique : "msec sec", où sec est le nombre de secondes écoulées depuis le 1er janvier 1970, et msec la partie des microsecondes. Autrement dit, si microtime retourne "0.12345 9876543", cela veut dire 9876543.12345 secondes.

Cette fonction est par exemple très utile pour calculer le temps d'exécution d'un script.

  1. <?php
  2.  
  3. // retourne la différence entre deux temps
  4. function affiche_temps($t1,$t2)
  5. {
  6. $t1 = explode(' ', $t1);
  7. $t2 = explode(' ', $t2);
  8. echo ( $t2[1] . substr($t2[0], 1, 9) ) - ( $t1[1] . substr($t1[0], 1, 9) );
  9. }
  10.  
  11. $chaine = 'une chaine avec truc et chose';
  12.  
  13. $t1 = microtime();
  14.  
  15. // code 1
  16. for($i=0 ; $i<100000 ; $i++)
  17. ereg_replace('truc', 'chose', $chaine);
  18.  
  19. $t2 = microtime();
  20.  
  21. // code 2
  22. for($i=0 ; $i<100000 ; $i++)
  23. str_replace('truc', 'chose', $chaine);
  24.  
  25. $t3 = microtime();
  26.  
  27. // code 3
  28. for($i=0 ; $i<100000 ; $i++)
  29. preg_replace('/truc/', 'chose', $chaine);
  30.  
  31. $t4 = microtime();
  32.  
  33. // affiche le temps d'exécution du code 1
  34. echo '<p>ereg_replace : ';
  35. affiche_temps($t1,$t2);
  36. echo '</p>'; // ex: ereg_replace : 0.695464134216
  37. // affiche le temps d'exécution du code 2
  38. echo '<p>str_replace : ';
  39. affiche_temps($t2,$t3);
  40. echo '</p>'; // ex: str_replace : 0.265631914139
  41. // affiche le temps d'exécution du code 3
  42. echo '<p>preg_replace : ';
  43. affiche_temps($t3,$t4);
  44. echo '</p>'; // ex: preg_replace : 0.375200986862
  45.  
  46. ?>

On voit que str_replace() est bien plus rapide que ereg_replace() dans cet exemple.

3- Calculer l'écart entre deux dates

Contrairement à l'asp, il n'y a pas de fonction permettant de calculer l'écart entre deux dates. Mais ce n'est pas compliqué à réaliser.

En fait il faut transformer les deux dates en "timestamp", à l'aide de la fonction mktime(). Puis calculer l'écart entre nos deux dates.

Par exemple, pour calculer le nombre de jours entre le 22/10/1989 et maintenant.

  1. <?php
  2.  
  3. // -- DATE 1 --
  4. $date = '22/10/1989';
  5. $jour = substr($date, 0, 2); // on récupère le jour
  6. $mois = substr($date, 3, 2); // puis le mois
  7. $annee = substr($date, 6, 4); // et l'annee ...
  8. // on aurait également pu plutot utiliser
  9. // list($jour, $mois, $annee) = explode('/', $date);
  10. // on transforme la date en timestamp
  11. $timestamp = mktime(0, 0, 0, $mois, $jour, $annee);
  12.  
  13. // -- DATE ACTUELLE --
  14. // directement en timestamp.
  15. $maintenant = time();
  16.  
  17. // -- CALCUL --
  18. // on calcule le nombre de secondes d'écart entre les deux dates
  19. $ecart_secondes = $maintenant - $timestamp;
  20. // puis on tranforme en jours (arrondi inférieur)
  21. $ecart_jours = floor($ecart_secondes / (60*60*24));
  22. // enfin on affiche le résultat
  23. setlocale(LC_TIME, "fr");
  24. echo "$ecart_jours jours se sont écoulés depuis le ".strftime("%A %d %B %Y");
  25.  
  26. ?>

4- Conclusion

Il y a donc peu de fonctions, mais qui permettent de tout faire.