La gestion des dates en PHP est tres simple. Vous allez voir que tout au long de ce chapitre, nous allons nous servir d'une fonction principale, la fonction date(). Nous verrons ensuite la fonction time() et mktime(). L'utilisation de ces trois fonctions constitue les bases de ce tutorial sur les dates en PHP.
Incontournable, la fonction date() s'utilise de differentes facons. Elle renvoie toujours une chaine de caracteres correspondant a ce qu'on lui a demande (ca peut etre l'heure, le jour, le mois, etc...). Attention, les parametres renvoyes correspondront a ceux du serveur, si votre serveur a une heure dereglee, la fonction date() ne renverra pas une heure correcte. Pour que la fonction sache ce qu'on attend d'elle et qu'elle ne nous renvoie pas n'importe quoi (les minutes au lieu de l'heure par exemple) on va placer comme parametre unique un code. Ce code se compose de differents caracteres que nous allons detailler ci-dessous :
| Caractere | Signification | Exemples de valeurs possibles : |
|---|---|---|
| Jour | ||
| j | Jour du mois sur deux chiffres sans les zeros initiaux | 1 a 31 |
| d | Jour du mois sur deux chiffres avec un zero initial en fonction du jour | 01 a 31 |
| l (L minuscule) | Jour de la semaine en anglais | Sunday a Saturday |
| w | Jour de la semaine au format numerique | 0 (dimanche) a 6 (samedi) |
| z | Jour de l'annee | 0 a 366 |
| Semaine | ||
| W | Numero de semaine dans l'annee (les semaines commencent le lundi) | Exemple : 42 (la 42eme semaine de l'annee) |
| Mois | ||
| F | Mois, textuel, version longue; en anglais, comme January ou December | January a December |
| m | Mois au format numerique, avec zeros initiaux | 01 a 12 |
| n | Mois sans les zeros initiaux | 1 a 12 |
| t | Nombre de jours dans le mois | 28 a 31 |
| Annee | ||
| L | Est ce que l'annee est bissextile | 1 si bissextile, 0 sinon. |
| Y | Annee sur 4 chiffres | Exemples : 1999 et 2003 |
| y | Annee sur 2 chiffres | Exemples : 99 et 03 |
| Heure | ||
| a | Ante meridien et Post meridien (minuscules) | am ou pm |
| A | Ante meridien et Post meridien (majuscules) | AM ou PM |
| g | Heure (format 12h) sans les zeros initiaux | 1 a 12 |
| G | Heure (format 24h) sans les zeros initiaux | 0 a 23 |
| h | Heure (format 12h) avec les zeros initiaux | 01 a 12 |
| H | Heure (format 24h) avec les zeros initiaux | 00 a 23 |
| s | Secondes avec zeros initiaux | 00 a 59 |
| i | Minutes avec zeros initiaux | 00 a 59 |
Par exemple, voici un cas concret : nous allons afficher l'annee en cours avec la fonction date() :
<?php
echo date('Y'); //affichera l'annee actuelle sur 4 chiffres
?>
Vous n'avez plus qu'a vous referer aux autres codes pour afficher ce que vous voulez. Tout ca c'est bien beau mais si vous souhaitez afficher toute une date avec un seul appel a la fonction date, comment feriez-vous ?
Si vous souhaitez afficher le mois et l'annee, vous pourriez faire ceci :
<?php
echo date('m').' '.date('Y'); //affichera le mois sur deux chiffres et l'annee actuelle sur 4 chiffres
?>
Cette solution est cependant peu pratique et gourmande. Vous avez un moyen bien plus simple de le faire :
<?php
echo date('m Y'); //affichera le mois sur deux chiffres et l'annee actuelle sur 4 chiffres
?>
Vous allez meme pouvoir formater votre date comme bon vous semble, par exemple si vous souhaitez separer les composantes de votre date par un slash (/), vous pouvez mettre ceci :
<?php
echo date('m/Y');
?>
Vous allez surement vous demander de quoi il s'agit, et c'est normal ;) Un timestamp est un nombre qui indique le nombre de secondes qui se sont ecoulees depuis le premier janvier 1970. Vous allez me dire jusque-la, "mais a quoi ca sert" ? patience, on y arrive :)
Le premier janvier 1970 a minuit, le timestamp valait 0. Il tient maintenant sur 10 chiffres, c'est dire si le nombre de secondes qui se sont ecoulees depuis est important !
Pour afficher le timestamp de la seconde actuelle, on utilise la fonction time() de PHP. Voici un exemple :
<?php
echo time(); //Affiche le nombre de secondes ecoulees depuis le 1er janvier 1970
?>
Par defaut, la fonction date ne demande qu'un seul parametre comme nous l'avons vu plus haut, cela permet d'afficher par exemple le jour actuel ou encore la minute et la seconde courantes. Nous pouvons par contre, et la cela devient interessant, afficher toutes ces informations pour un timestamp donne. La fonction date telle que nous l'avons vue correspond a ceci :
<?php
echo date('Y', time());
?>
Si nous indiquons un timestamp different, PHP va nous retourner tout ce que vous voulez pour le timestamp donne et non pour le temps courant. Imaginez ceci :
<?php
$timestamp = time() - 3600;
echo date('Y', $timestamp);
?>
PHP va vous retourner ici le jour qu'il etait il y a une heure ! en effet, on utilise ici le timestamp $timestamp qui correspond au timestamp actuel (obtenu via la fonction time() auquel on a retranche 3600 secondes, soit une heure) !
Vous comprenez maintenant qu'il va etre possible d'effectuer des choses tres puissantes avec le timestamp de PHP. Vous venez d'apprendre comment convertir un timestamp en date avec la fonction date(), nous allons maintenant voir comment convertir une date en timestamp, vous allez voir ce n'est pas complique !
PHP permet de convertir une date vers un timestamp. Pour ce faire, on utilise la fonction mktime(). Elle va vous permettre a partir du jour, de l'heure, etc ... d'une date classique, d'obtenir le timestamp correspondant. Ce timestamp pourra etre ensuite stocke ou encore subir des traitements. Voici la syntaxe de base de la fonction mktime() :
<?php
$timestamp = mktime(heures, minutes, secondes, mois, jour, annee);
?>
Si vous voulez obtenir le timestamp du 3er janvier 1988 a 2h31 et 10 secondes, vous pouvez mettre ceci :
<?php
echo mktime(2, 31, 10, 1, 3, 1988);
?>