Gérer les dates en PHP
Introduction :
Avec PHP, de nombreuses fonctions de temps et de date sont à notre disposition pour manipuler les dates. Ces fonctions permettent d'obtenir, notamment, la date courante dans différents formats. Nous allons donc essayer ici de faire le tour de ces fonctions pour vous montrer les différentes utilisations de celles-ci. Avant tout, il faut savoir que PHP fournit l'instant sous forme d'une valeur entière que nous appelons 'timestamp' UNIX: il s'agit du nombre de secondes écoulées depuis le 1er janvier 1970 à minuit. Nous verrons donc aussi les fonctions qui renvoient un timestamp et qui manipulent cette valeur.
Il est assez simple d'afficher la date (et/ou l'heure) locale du serveur avec la fonction date(). La fonction date() renvoie une chaîne de caractères décrivant, de manière plus compréhensible que le 'timestamp', la date selon le format spécifié.
Code:
?>
L'argument timestamp, interprété à partir du temps local, est optionnel. Quant à la chaîne format, elle contient des éléments particuliers qui sont les suivants:
Eléments | Description |
a | am ou pm |
A | AM ou PM |
B | "Swatch Beat Time" |
d | Jour du mois |
D | Jour de la semaine en anglais abrégé en 3 lettres |
F | Nom du mois |
g | Heure, au format 12h, sans les zéros initiaux |
G | Heure, au format 24h, sans les zéros initiaux |
h | Heure, au format 12h (01 à 12) |
H | Heure, au format 24h (00 à 23) |
i | Minutes |
j | Jour du mois, sans les zéros initiaux |
l | Jour de la semaine en anglais |
L | 1 pour l'année bissextile, 0 sinon |
m | Chiffre du mois, de 01 à 12 |
M | Abréviation du nom du mois |
S | Suffixe ordinal pour le jour du mois |
t | Nombre de jour dans le mois (28, 29, 30 ou 31) |
U | Nombre de secondes depuis le 1er Janvier 1970 |
y | Année en 2 chiffres |
Y | Année en 4 chiffres |
z | Jour de l'année de 0 à 365 |
Z | Décalage horaire de la zone en secondes (-43200 à 43200) |
> Exemple d'utilisation:
Code:
$heure = date("H:i");
echo 'Nous sommes le '.$date.' et il est '.$heure;
?>
Ce qui donnera par exemple: Nous sommes le 11-07-2005 et il est 11:52
Pour récupérer le 'timestamp' en cours, il existe pour cela la fonction time(): elle renvoie une valeur entière qui est le nombre de secondes écoulées depuis le 1er Janvier 1970 minuit GMT.
Code:
?>
Ce qui renverra par exemple: 1121075921
La fonction time() peut être utilisée avec la fonction date() pour formater une date depuis un 'timestamp':
Code: |
echo date("d-m-Y", time()+24*3600); ?> |
Ce qui renverra la date courante + 24 heures, ie. la date du lendemain de la date courante.
Maintenant que nous savons récupérer le 'timestamp' correspondant à l'instant présent, il peut être intéressant de récupérer celui d'une date donnée: c'est le rôle de la fonction mktime().
Code: |
mktime("entier heure","entier minute","entier seconde","entier mois","entier jour","entier année"); ?> |
Tous les arguments sont optionnels et s'ils ne sont pas indiqués, la valeur courante sera utilisée. Comme pour la fonction time(), mktime() peut être utilisée avec date():
Code: |
echo date("d-m-Y", mktime(0,0,0,11,11,2005)+24*3600); ?> |
Ce qui renverra la date du lendemain du 11/11/2005.
Il existe une autre fonction permettant de convertir un 'timestamp': il s'agit de la fonction getdate()
Code: |
getdate("entier timestamp"); ?> |
La fonction getdate() renvoie un tableau associatif, avec une information à propos de la date spécifiée. Voici les éléments du tableau retourné par getdate():
Eléments | Description |
hours | Heure au format 24 heures |
mday | Jour du mois |
minutes | Heure exprimée en minutes |
mon | Mois en chiffre |
month | Nom entier du mois en anglais |
seconds | Minute exprimée en secondes |
wday | Jour de la semaine en chiffre (0 à 6) |
weekday | Nom du jour de la semaine en anglais |
yday | Jour de l'année en chiffre |
year | Année |
0 | Timestamp |
> Exemple d'utilisation de getdate():
Code:
$current_date = getdate();
//On affiche les éléments du tableau renvoyé
foreach ($current_date as $key => $value)
{
echo $key.' : '.$value.'
';
}
?>
La fonction checkdate() permet de contrôler la validité d'une date provenant d'une entrée utilisateur par exemple. Elle renvoie true si la date est valide, false dans le cas contraire.
Code:
?>
La date est considérée comme valide si : l'année est comprise entre 1 et 32767 inclus, le mois est compris entre 1 et 12 inclus et le jour est compris dans l'intervalle de dates du mois (les années bissextiles étant prises en compte).
Cette fonction est similaire à date(), mais elle renvoie une date à un format particulier en prenant en compte les options locales (elle permet par exemple d'afficher la date en français lorsqu'elle est utilisée avec setlocale() ).
Code:
?>
Le paramètre 'timestamp' est optionnel et la chaîne format accepte les éléments de la liste suivante:
Eléments | Description |
%a | Abréviation du nom des jours de la semaine (local) |
%A | Nom complet des jours de la semaine (local) |
%b | Abréviation du nom des mois (local) |
%B | Nom complet des mois |
%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) |
%d | Jour du mois en chiffre (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 | Heure basée sur 24 heures (00 à 23) |
%I | Heure basée sur 12 heures (01 à 12) |
%j | Jour de l'année en chiffre (001 à 366) |
%m | Mois de 1 à 12 |
%M | Minutes |
%p | Représentation équivalente de am ou pm |
%S | Secondes |
%T | L'heure actuelle (égal à %H:%M:%S) |
%u | Le numéro de jour dans la semaine, de 1 à 7 |
%U | Numéro de semaine dans l'année, avec le premier dimanche de l'année comme le premier jour de la première semaine |
%W | Numéro de semaine dans l'année, avec 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 ou %z | Fuseau horaire, ou nom ou abréviation |
%% | Un caractère `%' littéral |
> Exemple d'utilisation: Afficher une date en français
Code:
$date_fr = strftime("%A %d %B %Y");
echo 'Nous sommes le '.$date_fr;
?>
Ce qui affichera par exemple: Nous sommes le lundi 11 juillet 2005
La fonction microtime() renvoie une chaîne de caractères contenant 2 nombres séparés par un espace. Le premier nombre est une valeur comprise entre 0.000... et 0.999... qui est le nombre de microsecondes. Le second nombre placé dans la chaîne est le nombre de secondes écoulées depuis le 1er Janvier 1970 minuit GMT.
Code:
//Affiche par exemple: 0.73333600 1121093746
//ce qui correspond à 1121093746.73333600 sec
?>
Il ne vous reste maintenant plus qu'à tester toutes ces fonctions pour mieux vous rendre compte de ce qu'elles font avec leurs paramètres. Bon courage...