Date et heure
.1 Localisation
Le format de date et d'heure (format et langue) est dépendant de l'environnement d'exécution du
code PHP. Généralement la plupart des serveurs web incorporant PHP sont configurés en langue
anglaise avec une gestion des informations de localisation en anglais. Il peut être préférable de
passer en français pour un site francophone ce qui simplifie largement la tâche. On peut effectuer
cela avec la fonction « setlocale ». Voici deux exemples : un sous NT/2000 et un autre sous Linux.
if (substr(php_uname(), 0, 7) != "Windows") {
setlocale(LC_TIME,"fr_FR@euro");
} else {
setlocale(LC_TIME,"fr");
}
Dans cet exemple, nous vérifions d'abord à quel système nous avons à faire (fonction php_uname)
puis en fonction du résultat nous passons en localisation française selon deux méthodes. Après ce
changement, les appels aux fonctions retournant des jours de la semaine ou des mois le feront en
français.
9.2 Récupérer la date et l'heure
9.2.1 date()
Le plus simple est d'utiliser la fonction « date » qui retourne l'heure locale sous forme d'une chaîne
de caractères à préciser en premier paramètre. En second paramètre on peut préciser un
« timestamp » si on ne souhaite pas l'heure actuelle. Pour récupérer la date du jour :
echo date("d/m/Y"); // 06/01/2004
Voici les caractères utilisables (documentation PHP) :
• a - "am" (matin) ou "pm" (après-midi)
• A - "AM" (matin) ou "PM" (après-midi)
• B - Heure Internet Swatch
• d - Jour du mois, sur deux chiffres (éventuellement avec un zéro) : "01" à "31"
• D - Jour de la semaine, en trois lettres (et en anglais) : par exemple "Fri" (pour Vendredi)
• F - Mois, textuel, version longue; en anglais, i.e. "January" (pour Janvier)
• g - Heure, au format 12h, sans les zéros initiaux i.e. "1" à "12"
• G - Heure, au format 24h, sans les zéros initiaux i.e. "0" à "23"
• h - Heure, au format 12h, "01" à "12"
• H - heure, au format 24h, "00" à "23"
• i - Minutes; "00" à "59"
• I (i majuscule) - "1" si l'heure d'été est activée, "0" si l'heure d'hiver .
• j - Jour du mois sans les zéros initiaux: "1" à "31"
S. ROHAUT Cours Programmation PHP Page 34/93• l - ('L' minuscule) - Jour de la semaine, textuel, version longue; en anglais, i.e. "Friday" (pour
Vendredi)
• L - Booléen pour savoir si l'année est bissextile ("1") ou pas ("0")
• m - Mois; i.e. "01" à "12"
• M - Mois, en trois lettres (et en anglais) : par exemple "Apr" (pour Avril)
• n - Mois sans les zéros initiaux; i.e. "1" à "12"
• O - Différence d'heures avec l'heure de Greenwich, exprimée en heures; i.e. "+0200"
• r - Format de date RFC 822; i.e. "Thu, 21 Dec 2000 16:01:07 +0200" (ajouté en PHP 4.0.4)
• s - Secondes; i.e. "00" à "59"
• S - Suffixe ordinal d'un nombre, en anglais, sur deux lettres : i.e. "th", "nd"
• t - Nombre de jours dans le mois donné, i.e. "28" à "31"
• T - Fuseau horaire de la machine ; i.e. "MET"
• U - Secondes depuis une époque
• w - Jour de la semaine, numérique, i.e. "0" (Dimanche) to "6" (Samedi)
• W - Numéro de semaine dans l'année ISO-8601 : les semaines commencent le lundi (ajouté en
PHP 4.1.0)
• Y - Année, 4 chiffres; i.e. "1999"
• y - Année, 2 chiffres; i.e. "99"
• z - Jour de l'année; i.e. "0" à "365"
• Z - Décalage horaire en secondes (i.e. "-43200" à "43200")
Tout autre caractère peut être employé et ne sera pas interprété. Si vous désirez employer l'un de ces
caractères, il faut le verrouiller avec un antislash. ATTENTION AVEC CETTE FONCTION LE
RESULTAT EST EN ANGLAIS.
On peut récupérer le timestamp actuel avec la fonction « time ». La commande suivante a la même
effet que la précédente :
echo date("d/m/Y", time()); // 06/01/2004
.2 date locale strftime()
Pour formater le résultat en local (pour tenir compte de la localisation) il faut utiliser la fonction
« strftime » qui tient compte de la langue. On aura donc un résultat en français. Le premier
paramètre est la chaîne de formatage. Le second est un éventuel timestamp.
• %a - nom abrégé du jour de la semaine (local).
• %A - nom complet du jour de la semaine (local).
• %b - nom abrégé du mois (local).
• %B - nom complet du mois (local).
• %c - représentation préférée pour les dates et heures, en local.
• %C - numéro de siècle (l'année, divisée par 100 et arrondie entre 00 et 99)
S. ROHAUT Cours Programmation PHP Page 35/93• %d - jour du mois en numérique (intervalle 01 à 31)
• %D - identique à %m/%d/%y
• %e - numéro du jour du mois. Les chiffres sont précédés d'un espace (de ' 1' à '31')
• %h - identique à %b
• %H - heure de la journée en numérique, et sur 24-heures (intervalle de 00 à 23)
• %I - heure de la journée en numérique, et sur 12- heures (intervalle 01 à 12)
• %j - jour de l'année, en numérique (intervalle 001 à 366)
• %m - mois en numérique (intervalle 1 à 12)
• %M - minute en numérique
• %n - newline character
• %p - soit `am' ou `pm' en fonction de l'heure absolue, ou en fonction des valeurs enregistrées en
local.
• %r - l'heure au format a.m. et p.m.
• %R - l'heure au format 24h
• %S - secondes en numérique
• %t - tabulation
• %T - l'heure actuelle (égal à %H:%M:%S)
• %u - le numéro de jour dans la semaine, de 1 à 7. (1 représente Lundi)
• %U - numéro de semaine dans l'année, en considérant le premier dimanche de l'année comme le
premier jour de la première semaine.
• %V - le numéro de semaine comme défini dans l'ISO 8601:1988, sous forme décimale, de 01 à
53. La semaine 1 est la première semaine qui a plus de 4 jours dans l'année courante, et dont
Lundi est le premier jour.
• %W - numéro de semaine dans l'année, en considérant le premier lundi de l'année comme le
premier jour de la première semaine
• %w - jour de la semaine, numérique, avec Dimanche = 0
• %x - format préféré de représentation de la date sans l'heure
• %X - format préféré de représentation de l'heure sans la date
• %y - l'année, numérique, sur deux chiffres (de 00 à 99)
• %Y - l'année, numérique, sur quatre chiffres
• %Z - fuseau horaire, ou nom ou abréviation
• %% - un caractère `%' littéral
9.2.3 Retour par tableau getdate()
La fonction « getdate » permet aussi de récupérer la date et l'heure actuels (avec éventuellement un
timestamp en paramètre) mais sous forme de tableau indexé selon les valeurs suivantes :
• "seconds" - secondes
• "minutes" - minutes
S. ROHAUT Cours Programmation PHP Page 36/93• "hours" - heures
• "mday" - jour du mois
• "wday" - jour de la semaine, numérique. 0: dimanche jusqu'à 6: samedi
• "mon" - mois, numérique
• "year" - année, numérique
• "yday" - jour de l'année, numérique; i.e. "299"
• "weekday" - jour de la semaine, texte complet (en anglais); i.e. "Friday"
• "month" - mois, texte complet (en anglais); i.e. "January"
$aujourdhui = getdate();
$mois = $aujourdhui['month'];
$mjour = $aujourdhui['mday'];
$annee = $aujourdhui['year'];
echo "$mjour/$mois/$annee";
.4 L'heure localtime()
Pour l'heure on peut utiliser les fonctions « localtime » qui peut aussi prendre un paramètre
timestamp et qui retourne un tableau indexé selon les valeurs suivantes ;
• "tm_sec" - secondes
• "tm_min" - minutes
• "tm_hour" - heure
• "tm_mday" - jour du mois
• "tm_mon" - mois de l'année
• "tm_year" - Année, incompatible an 2000
• "tm_wday" - Jour de la semaine
• "tm_yday" - Jour de l'année
• "tm_isdst" - Est-ce que l'heure d'hiver a pris effet?
.3 Récupérer n'importe quelle date
On peut récupérer n'importe quelle date en timestamp ou en chaîne. On peut pour cela utiliser la
fonction « strtotime ». Elle prend comme paramètre une chaîne de texte en anglais qu'elle essaie de
convertir en timestamp. Voici quelques exemples.
echo strtotime("now"); // timestamp actuel
echo strtotime("-1 day"); // hier
echo strtotime("+1 day"); // demain
echo strtotime("11 september 2001"); // Le 11 septembre 2001
echo strtotime("+1 year +2 weeks +3 days"); // dans 1 an 2 semaines 3 jours
.1 Localisation
Le format de date et d'heure (format et langue) est dépendant de l'environnement d'exécution du
code PHP. Généralement la plupart des serveurs web incorporant PHP sont configurés en langue
anglaise avec une gestion des informations de localisation en anglais. Il peut être préférable de
passer en français pour un site francophone ce qui simplifie largement la tâche. On peut effectuer
cela avec la fonction « setlocale ». Voici deux exemples : un sous NT/2000 et un autre sous Linux.
if (substr(php_uname(), 0, 7) != "Windows") {
setlocale(LC_TIME,"fr_FR@euro");
} else {
setlocale(LC_TIME,"fr");
}
Dans cet exemple, nous vérifions d'abord à quel système nous avons à faire (fonction php_uname)
puis en fonction du résultat nous passons en localisation française selon deux méthodes. Après ce
changement, les appels aux fonctions retournant des jours de la semaine ou des mois le feront en
français.
9.2 Récupérer la date et l'heure
9.2.1 date()
Le plus simple est d'utiliser la fonction « date » qui retourne l'heure locale sous forme d'une chaîne
de caractères à préciser en premier paramètre. En second paramètre on peut préciser un
« timestamp » si on ne souhaite pas l'heure actuelle. Pour récupérer la date du jour :
echo date("d/m/Y"); // 06/01/2004
Voici les caractères utilisables (documentation PHP) :
• a - "am" (matin) ou "pm" (après-midi)
• A - "AM" (matin) ou "PM" (après-midi)
• B - Heure Internet Swatch
• d - Jour du mois, sur deux chiffres (éventuellement avec un zéro) : "01" à "31"
• D - Jour de la semaine, en trois lettres (et en anglais) : par exemple "Fri" (pour Vendredi)
• F - Mois, textuel, version longue; en anglais, i.e. "January" (pour Janvier)
• g - Heure, au format 12h, sans les zéros initiaux i.e. "1" à "12"
• G - Heure, au format 24h, sans les zéros initiaux i.e. "0" à "23"
• h - Heure, au format 12h, "01" à "12"
• H - heure, au format 24h, "00" à "23"
• i - Minutes; "00" à "59"
• I (i majuscule) - "1" si l'heure d'été est activée, "0" si l'heure d'hiver .
• j - Jour du mois sans les zéros initiaux: "1" à "31"
S. ROHAUT Cours Programmation PHP Page 34/93• l - ('L' minuscule) - Jour de la semaine, textuel, version longue; en anglais, i.e. "Friday" (pour
Vendredi)
• L - Booléen pour savoir si l'année est bissextile ("1") ou pas ("0")
• m - Mois; i.e. "01" à "12"
• M - Mois, en trois lettres (et en anglais) : par exemple "Apr" (pour Avril)
• n - Mois sans les zéros initiaux; i.e. "1" à "12"
• O - Différence d'heures avec l'heure de Greenwich, exprimée en heures; i.e. "+0200"
• r - Format de date RFC 822; i.e. "Thu, 21 Dec 2000 16:01:07 +0200" (ajouté en PHP 4.0.4)
• s - Secondes; i.e. "00" à "59"
• S - Suffixe ordinal d'un nombre, en anglais, sur deux lettres : i.e. "th", "nd"
• t - Nombre de jours dans le mois donné, i.e. "28" à "31"
• T - Fuseau horaire de la machine ; i.e. "MET"
• U - Secondes depuis une époque
• w - Jour de la semaine, numérique, i.e. "0" (Dimanche) to "6" (Samedi)
• W - Numéro de semaine dans l'année ISO-8601 : les semaines commencent le lundi (ajouté en
PHP 4.1.0)
• Y - Année, 4 chiffres; i.e. "1999"
• y - Année, 2 chiffres; i.e. "99"
• z - Jour de l'année; i.e. "0" à "365"
• Z - Décalage horaire en secondes (i.e. "-43200" à "43200")
Tout autre caractère peut être employé et ne sera pas interprété. Si vous désirez employer l'un de ces
caractères, il faut le verrouiller avec un antislash. ATTENTION AVEC CETTE FONCTION LE
RESULTAT EST EN ANGLAIS.
On peut récupérer le timestamp actuel avec la fonction « time ». La commande suivante a la même
effet que la précédente :
echo date("d/m/Y", time()); // 06/01/2004
.2 date locale strftime()
Pour formater le résultat en local (pour tenir compte de la localisation) il faut utiliser la fonction
« strftime » qui tient compte de la langue. On aura donc un résultat en français. Le premier
paramètre est la chaîne de formatage. Le second est un éventuel timestamp.
• %a - nom abrégé du jour de la semaine (local).
• %A - nom complet du jour de la semaine (local).
• %b - nom abrégé du mois (local).
• %B - nom complet du mois (local).
• %c - représentation préférée pour les dates et heures, en local.
• %C - numéro de siècle (l'année, divisée par 100 et arrondie entre 00 et 99)
S. ROHAUT Cours Programmation PHP Page 35/93• %d - jour du mois en numérique (intervalle 01 à 31)
• %D - identique à %m/%d/%y
• %e - numéro du jour du mois. Les chiffres sont précédés d'un espace (de ' 1' à '31')
• %h - identique à %b
• %H - heure de la journée en numérique, et sur 24-heures (intervalle de 00 à 23)
• %I - heure de la journée en numérique, et sur 12- heures (intervalle 01 à 12)
• %j - jour de l'année, en numérique (intervalle 001 à 366)
• %m - mois en numérique (intervalle 1 à 12)
• %M - minute en numérique
• %n - newline character
• %p - soit `am' ou `pm' en fonction de l'heure absolue, ou en fonction des valeurs enregistrées en
local.
• %r - l'heure au format a.m. et p.m.
• %R - l'heure au format 24h
• %S - secondes en numérique
• %t - tabulation
• %T - l'heure actuelle (égal à %H:%M:%S)
• %u - le numéro de jour dans la semaine, de 1 à 7. (1 représente Lundi)
• %U - numéro de semaine dans l'année, en considérant le premier dimanche de l'année comme le
premier jour de la première semaine.
• %V - le numéro de semaine comme défini dans l'ISO 8601:1988, sous forme décimale, de 01 à
53. La semaine 1 est la première semaine qui a plus de 4 jours dans l'année courante, et dont
Lundi est le premier jour.
• %W - numéro de semaine dans l'année, en considérant le premier lundi de l'année comme le
premier jour de la première semaine
• %w - jour de la semaine, numérique, avec Dimanche = 0
• %x - format préféré de représentation de la date sans l'heure
• %X - format préféré de représentation de l'heure sans la date
• %y - l'année, numérique, sur deux chiffres (de 00 à 99)
• %Y - l'année, numérique, sur quatre chiffres
• %Z - fuseau horaire, ou nom ou abréviation
• %% - un caractère `%' littéral
9.2.3 Retour par tableau getdate()
La fonction « getdate » permet aussi de récupérer la date et l'heure actuels (avec éventuellement un
timestamp en paramètre) mais sous forme de tableau indexé selon les valeurs suivantes :
• "seconds" - secondes
• "minutes" - minutes
S. ROHAUT Cours Programmation PHP Page 36/93• "hours" - heures
• "mday" - jour du mois
• "wday" - jour de la semaine, numérique. 0: dimanche jusqu'à 6: samedi
• "mon" - mois, numérique
• "year" - année, numérique
• "yday" - jour de l'année, numérique; i.e. "299"
• "weekday" - jour de la semaine, texte complet (en anglais); i.e. "Friday"
• "month" - mois, texte complet (en anglais); i.e. "January"
$aujourdhui = getdate();
$mois = $aujourdhui['month'];
$mjour = $aujourdhui['mday'];
$annee = $aujourdhui['year'];
echo "$mjour/$mois/$annee";
.4 L'heure localtime()
Pour l'heure on peut utiliser les fonctions « localtime » qui peut aussi prendre un paramètre
timestamp et qui retourne un tableau indexé selon les valeurs suivantes ;
• "tm_sec" - secondes
• "tm_min" - minutes
• "tm_hour" - heure
• "tm_mday" - jour du mois
• "tm_mon" - mois de l'année
• "tm_year" - Année, incompatible an 2000
• "tm_wday" - Jour de la semaine
• "tm_yday" - Jour de l'année
• "tm_isdst" - Est-ce que l'heure d'hiver a pris effet?
.3 Récupérer n'importe quelle date
On peut récupérer n'importe quelle date en timestamp ou en chaîne. On peut pour cela utiliser la
fonction « strtotime ». Elle prend comme paramètre une chaîne de texte en anglais qu'elle essaie de
convertir en timestamp. Voici quelques exemples.
echo strtotime("now"); // timestamp actuel
echo strtotime("-1 day"); // hier
echo strtotime("+1 day"); // demain
echo strtotime("11 september 2001"); // Le 11 septembre 2001
echo strtotime("+1 year +2 weeks +3 days"); // dans 1 an 2 semaines 3 jours