Pour les informaticiens, le temps n'est pas compté en secondes,
minutes, heures, jours, mois et années, mais en nombre de secondes
écoulées depuis le 1er janvier 1970 0h 0mn 0s (cette date arbitraire
est parfois appelée ére UNIX). Le nombre de secondes écoulées depuis
cette date est appelé timestamp ou parfois instant UNIX. Pour
les dates antérieures aux 01/01/1970 00:00:00, le timestamp est
négatif.
Sous Windows les fonctions de dates de PHP
n'acceptent pas de paramètres négatifs. On ne peut donc pas y
travailler avec des dates antérieures au 1/1/1970.
Le timestamp est stocké dans un entier signé de
32 bits, la date minimum qu'il est possible d'y stocker est le
vendredi 13 décembre 1901 20:45:54, et la date maximum est le mardi
19 janvier 2038 03:14:07 (la fin du monde pour l'ère UNIX).
Toutes les fonctions de calcul de dates dans PHP sont basées sur ce
timestamp. La fonction time()
renvoie le timestamp de l'instant présent.
La fonction htmlInfo() est une fonction
qui se trouve dans la bibliothèque bib_fonctions.php
et qui est un facilitateur (helper) pour afficher ce que vous
faisions avant avec echo '<h4>bla
bla bla</h4>';
Comme la valeur du timestamp n'a aucune signification directement
utilisable par un être humain, PHP offre plusieurs fonctions qui
permettent d'extraire les éléments constitutifs d'une date (année,
mois, jour, heure, minutes, semaine, etc.)
Nous étudierons
ici les deux fonctions les plus utilisées : getdate()
et date().
Ces deux fonctions travaillent à partir du timestamp de la date à
traiter, et renvoient les éléments constitutifs de cette date selon
les paramètres d'extraction qui leurs sont passés.
Obtenir une date avec getdate()
La fonction getdate()
retourne un tableau associatif contenant divers éléments
constitutifs de la date passée en paramètre. La date passée doit
être un timestamp valide. En l'absence de ce paramètre, c'est le
timestamp "actuel" qui est utilisé par la fonction.
Le tableau associatif retourné est composé
des clés :
- seconds
- : les secondes de 0 à 59
- minutes
- : les minutes de 0 à 59
- hours
- : les heures de 0 à 23
- mday
- : le numéro du jour dans le mois de 1 à 31
- wday
- : le nom du jour de la semaine de 0 (dimanche) à 6 (samedi)
- mon
- : le numéro mois de 1 à 12
- year
- : l'année sur 4 chiffres
- yday
- : le jour de l'année de 1 à 366
- weekday
- : le nom du jour de la semaine en anglais
- month
- : le nom du mois en anglais
- 0
- : le timestamp de la date
Obtenir une date avec date()
La fonction date()
est sans doute la fonction la plus utilisée pour traiter la
récupération et l'affichage d'éléments de dates. Cette fonction
accepte deux arguments :
- une chaîne de caractères indiquant les parties de la date à
prendre en compte,
- le timestamp de la date à traiter. En l'absence de ce paramètre, c'est le
timestamp "actuel" qui est utilisé par la fonction.
Les nombreux élements que peut retourner la fonction date()
sont définis chacun par un caractère alphabétique, en minuscule ou
en majuscule. Nous les étudierons en 2 fois : d'abord ceux
premettant la mise en forme des heures, puis ceux permettant la mise
en forme des dates proprement dites.
Les caractères suivants sont
utilisés pour extraire les éléments concernant les heures (attention
à bien respecter les majucules et les minuscules) :
- g
- : heure au format 2h ("1" à "12")
- h
- : heure au format 12h ("01" à "12")
- G
- : heure au format 24h ("0" à "23")
- H
- : heure au format 24h ("00" à "23")
- T
- : fuseau horaire de la machine ("MET")
- B
- : heure Internet Swatch
- O
- : différence d'heures avec Greenwich (i.e. "+0200")
- i
- : minutes ("00" à "59")
- s
- : secondes ("00" à "59")
- a
- : indiquera "am" (matin) ou "pm" (après-midi)
- A
- : indiquera "AM" (matin) ou "PM" (après-midi)
- I
- : "1" si l'heure d'été est activée, "0" sinon
- U
- : Nombre de secondes depuis le 1er Janvier 1970, 0h00 00s GMT
- Z
- : décalage horaire en secondes (de "-43200" à "43200")
- r
- : date au format RFC 822 ("Thu, 21 Dec 2000 16:01:07
+0200")
Vous noterez que la chaîne de caractères utilisée pour extraire les
éléments peut contenir des caractères spéciaux et des autres
caractères. Les autres caractères doivent être protégés avec un \
pour que la fonction ne les interprète pas comme un caractère
d'extraction. Dans l'exemple nous avons :
date('g\h i\m s\s A', time());
qui
renvoie quelque chose comme 8h 25m 32s PM
date('g \h\e\u\r\e\s i \m\i\n s \s\e\c. A',
time());
renverrait 8 heures 25 min 32 sec PM.
Les caractères suivants sont
utilisés pour extraire les éléments concernant les dates proprement
dites (attention à bien respecter les majucules et les minuscules).
Pour les jours nous avons :
- d
- : numéro du jour dans le mois sous la forme "01" à "31"
- j
- : numéro du jour dans le mois sous la forme "1" à "31"
- D
- : nom abrégé du jour de la semaine en anglais (i.e. "Fri"
pour Vendredi)
- l
- : nom complet du jour de la semaine anglais (i.e. "Friday"
pour Vendredi)
- S
- : suffixe ordinal d'un nombre, 2 lettres en anglais ("th",
"nd")
- t
- : nombre de jours dans le mois (i.e. "28" à "31")
- w
- : numéro du jour dans la semaine, de "0" (Dimanche) à "6"
(Samedi)
- z
- : numéro du jour dans l'année, de "0" "365"
Pour les mois nous avons :
- m
- : numéro du mois sous la forme "01" à "12"
- n
- : numéro du mois sous la forme "1" à "12"
- M
- : nom abrégé du mois en anglais (i.e. "Apr" pour Avril)
- F
- : nom complet du mois en anglais (i.e. "January" pour
Janvier)
Pour les années nous avons :
- L
- : booléen année bissextile ("1") ou pas ("0")
- Y
- : année sur 4 chiffres (i.e. "1999")
- y
- : année sur 2 chiffres (i.e. "99")
Pour afficher une date entièrement
en français, le plus simple est d'utiliser un tableau avec le nom
des jours et un tableau avec le nom des mois.
Vérifier qu'une date est correcte
PHP fournit la fonction checkdate()
pour vérifier qu'une date est une date valide et correcte. La
fonction accepte comme paramètre le mois, le jour et l'année de la
date à vérifier, et renvoie TRUE si la date représentée est valide.
Les années bissextiles sont prises en compte.