Les dates
Par Damien, mardi 1 mars 2005 à 20:49 :: PHP :: #12 :: rss
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ément | Description |
| a | "am" (matin) ou "pm" (après-midi) |
| A | "AM" (matin) ou "PM" (après-midi) |
| B | Swatch Internet time |
| d | Jour, "01" à "31" |
| D | Texte court du jour,en anglais (ex: "Fri") |
| F | Texte du mois, en anglais (ex: "January") |
| g | Heure, au format 12h, sans les zéros initiaux ("1" à "12") |
| G | Heure, au format 24h, sans les zéros initiaux ("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'hivers est activée, ou "0" sinon. |
| j | Jour du mois sans les zéros initiaux ("1" à "31") |
| l | ('L' minuscule) - Texte du jour, en anglais (ex: "Friday") |
| L | Booléen pour savoir si l'année est bisextile ("1") ou pas ("0") |
| m | Mois ("01" à "12") |
| M | Texte court du mois, en anglais (ex: "Apr") |
| n | Mois sans les zéros initiaux ( "1" à "12") |
| s | Secondes ("00" à "59") |
| S | Suffixe ordinal d'un nombre, en anglais, sur deux lettres ("th", "nd") |
| t | Nombre de jour dans le mois donné ("28" à "31") |
| T | Fuseau horaire de la machine (ex: "MET") |
| U | Nombre de secondes depuis le 1er janvier 1970 (équivalent à time()) |
| w | Jour de la semaine, numérique ("0" à "6") |
| Y | Année, sur 4 chiffres (ex: "1999") |
| y | Année, sur 2 chiffres (ex: "99") |
| z | Jour de l'année ("0" à "365") |
| Z | Décalage horaire en secondes ("-43200" à "43200") |
Exemple :
<?php ?>
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 :
<?php // autrement dit demain ?>
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 :
<?php // affiche la date du lendemain du 26/11/2000 ?>
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ément | Description |
| %a | Nom du jour, court (selon les paramètres locaux). |
| %A | Nom du jour, long (selon les paramètres locaux). |
| %b | Nom du mois, court (selon les paramètres locaux). |
| %B | Nom du mois, long (selon les paramètres locaux). |
| %c | Date et heure (selon les paramètres locaux). |
| %C | Numéro de siècle : année divisée par 100 et arrondie (00 à 99). |
| %d | Jour (00 à 31). |
| %D | Date (équivalent à %m/%d/%y). |
| %e | Jour (" 1" à "31"). Les chiffres (1 à 9) sont précédés d'un espace. |
| %h | Identique à %b |
| %H | Heure, sur 24 heures (00 à 23). |
| %I | Heure, sur 12 heures (01 à 12). |
| %j | Jour de l'année (001 à 366). |
| %m | Mois (1 à 12). |
| %M | Minute (00 à 60). |
| %n | Saut de ligne. |
| %p | "am" ou "pm", en fonction de l'heure. |
| %r | Heure, au format AM et PM. |
| %R | Heure, au format 24h. |
| %S | Secondes (00 à 60). |
| %t | Tabulation. |
| %T | Heure courante (équivalent à %H:%M:%S). |
| %u | Jour de la semaine (1 à 7), avec 7 pour dimanche. |
| %U | Numéro de semaine, avec le premier dimanche de l'année comme premier jour de la première semaine. |
| %V | Numé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. |
| %W | Numéro de semaine, avec le premier lundi de l'année comme premier jour de la première semaine. |
| %w | Jour de la semaine (0 à 6), avec 0 pour dimanche. |
| %x | Affichage de la date (selon les paramètres locaux). |
| %X | Affichage de l'heure (selon les paramètres locaux). |
| %y | Année, sur deux chiffres (00 à 99). |
| %Y | Année, sur quatre chiffres. |
| %Z | Fuseau horaire. |
| %% | Caractère % . |
Exemple :
<?php ?>
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.
<?php // retourne la différence entre deux temps function affiche_temps($t1,$t2) { } $chaine = 'une chaine avec truc et chose'; // code 1 for($i=0 ; $i<100000 ; $i++) // code 2 for($i=0 ; $i<100000 ; $i++) // code 3 for($i=0 ; $i<100000 ; $i++) // affiche le temps d'exécution du code 1 echo '<p>ereg_replace : '; affiche_temps($t1,$t2); // affiche le temps d'exécution du code 2 echo '<p>str_replace : '; affiche_temps($t2,$t3); // affiche le temps d'exécution du code 3 echo '<p>preg_replace : '; affiche_temps($t3,$t4); ?>
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.
<?php // -- DATE 1 -- $date = '22/10/1989'; // on aurait également pu plutot utiliser // list($jour, $mois, $annee) = explode('/', $date); // on transforme la date en timestamp // -- DATE ACTUELLE -- // directement en timestamp. // -- CALCUL -- // on calcule le nombre de secondes d'écart entre les deux dates $ecart_secondes = $maintenant - $timestamp; // puis on tranforme en jours (arrondi inférieur) // enfin on affiche le résultat ?>
4- Conclusion
Il y a donc peu de fonctions, mais qui permettent de tout faire.

Commentaires
1. Le vendredi 20 mai 2005 à 14:56, par ikoma
2. Le vendredi 20 mai 2005 à 16:39, par Damien
3. Le vendredi 5 mai 2006 à 15:50, par hermann
4. Le mardi 20 juin 2006 à 12:01, par ufufy
5. Le vendredi 23 juin 2006 à 15:53, par Ufufy
6. Le mardi 7 novembre 2006 à 14:39, par squisy
7. Le dimanche 14 janvier 2007 à 17:42, par jimmor
8. Le jeudi 1 février 2007 à 11:56, par zeus
9. Le samedi 27 octobre 2007 à 18:08, par Web PHP
10. Le dimanche 9 décembre 2007 à 19:10, par Pablo
11. Le mercredi 12 décembre 2007 à 16:01, par SlipKo?n
12. Le lundi 17 décembre 2007 à 11:22, par reds
13. Le samedi 5 janvier 2008 à 00:38, par test qi
14. Le vendredi 9 mai 2008 à 02:01, par foufi
15. Le vendredi 9 mai 2008 à 02:01, par foufi
Ajouter un commentaire