6.Le langage PHP

6.10.Les dates

6.10.2.Les fonctions natives PHP

6.10.2.6.Contrôler la validité d'une date

Pour contrôler la validité d'une date (dont vous avez extrait les données jour, mois et année[comment?]), vous pouvez avoir recours à la fonction checkdate() en passant en paramètre (et dans l'ordre indiqué) le mois, le jour et l'année. Cette fonction retournera false en cas de date invalide. Finis les 31 Avrils, 30 Février et autres 35 Décembre.
<?php
  $mois  = 12;
  $jour  = 35;
  $annee = 2001;
  if (checkdate($mois, $jour, $annee)) {
    echo "La date $jour/$mois/$annee existe bien";
  } else {
    echo "La date $jour/$mois/$annee n'est pas valide";
  }
?>
warning Attention: L'ordre des paramètres n'est pas jour, mois, année mais mois, jour, année

6.10.2.7.Le temps à la microseconde près

Il est également possible de récupérer la date à la microseconde près (ceci dit, il est probable que cette fonctionnalité ne soit pas disponible sous Windows - je n'ai pas vérifié) en utilisant la fonction gettimeofday().
<?php
$tableau = gettimeofday();
echo "Il s'est écoulé ".$tableau['sec']." secondes et ".
     $tableau['usec']." microsecondes depuis le 1er Janvier 1970.<br />";
?>
Exemple:
Il s'est écoulé 1713002637 secondes et 288925 microsecondes depuis le 1er Janvier 1970.
Ce qui permet par exemple d'estimer le temps d'execution d'une instruction.
<?php
  $top0 = gettimeofday();
  echo "Combien de temps pour afficher ce message ?<br>";
  $top1 = gettimeofday();
  
  $duree["sec"]  = $top1["sec"]-$top0["sec"];
  $duree["usec"] = $top1["usec"]-$top0["usec"];
  
  if ($duree["usec"]<0) {
  	$duree["sec"]--;
  	$duree["usec"]+=1000000;
  }

  echo "Il a fallu ".$duree["sec"]." secondes et ".
       $duree["usec"]." microsecondes<br />";
?>
Exemple:
Combien de temps pour afficher ce message ?
Il a fallu 0 secondes et 4 microsecondes
Cette fonction à la particularité de stocker l'information dans un tableau, ce qui est également le cas des fonctions localetime() et getdate().

6.10.2.8.Mise en pratique

6.10.2.8.1.Affichage des dates issues d'une base de donnée type MySQL

Lorsque vous récupérez la valeur d'un champ date, de type DATE, issu d'une base de données MySQL, celle-ci est par défaut formattée selon le schéma suivant : AAAA-MM-JJ (année sur 4 chiffres, un tiret, mois sur 2 chiffres, un tiret, jour sur 2 chiffres).
Si le champ est de type DATETIME ou TIMESTAMP, la valeur aura la forme AAAA-MM-JJ hh:mm:ss (format de DATE + un espace, heure sur 2 chiffres, deux points, minutes sur 2 chiffres, deux points, secondes sur 2 chiffres).
Si le champ est de type DATE mais retourné sous forme "numérique", la valeur aura la forme AAAAMMJJ (année sur 4 chiffres, mois sur 2 chiffres, jour sur 2 chiffres.
Si le champ est de type TIMESTAMP mais retourné sous forme "numérique", la valeur aura la forme AAAAMMJJhhmmss (format "numérique" de DATE + heure sur 2 chiffres, minutes sur 2 chiffres, secondes sur 2 chiffres).
Pour transformer ces valeurs en nombre de secondes depuis le 1er Janvier 1970 00:00:OO UTC (Epoch) il suffit de faire appel à strToTime().
Après conversion en nombre de secondes, je peux afficher:
<?php
setLocale(LC_TIME, 'fr_FR.utf8');
// Nous supposons, ici, que suite à une requête SQL (MySQL)
// et après lecture du résultat
// nous avons $date = "2002-02-01" (type DATE)
$date = '2002-02-01';
$nbSecondes = strToTime($date);
echo ' La date '.$date.' sous le format: '.
     strftime('%A %d %B %Y', $nbSecondes)."\n";

// Cette fois, c'est un type DATETIME ou TIMESTAMP
$date = '2003-02-01 10:23:30';
$nbSecondes = strToTime($date);
echo ' La date '.$date.' sous le format: '.
     strftime('%A %d %B %Y %H:%M:%S', $nbSecondes)."\n";

// Cette fois, un type DATE retourné sous "forme numérique"
$date = '20040201';
$nbSecondes = strToTime($date);
echo ' La date '.$date.' sous le format: '.
      strftime('%A %d %B %Y %H:%M:%S', $nbSecondes)."\n";

// Cette fois, un type TIMESTAMP retourné sous "forme numérique"
$date = '20050201102330';
$nbSecondes = strToTime($date);
echo ' La date '.$date.' sous le format: '.
      strftime('%A %d %B %Y %H:%M:%S', $nbSecondes)."\n";
?>
Après conversion en nombre de secondes, je peux afficher:
 La date 2002-02-01 sous le format: vendredi 01 février 2002
 La date 2003-02-01 10:23:30 sous le format: samedi 01 février 2003 10:23:30
 La date 20040201 sous le format: dimanche 01 février 2004 00:00:00
 La date 20050201102330 sous le format: mardi 01 février 2005 10:23:30
Si le champ est de type DATE mais retourné sous forme "numérique", la valeur aura la forme AAAAMMJJhhmmss.000000 (format "numérique" de TIMESTAMP + point + 6 chiffres) dans ce cas strToTime() ne peut plus être appliqué directement mais il suffit d'un petit pré-traitement pour s'en sortir.
Après conversion en nombre de secondes, je peux afficher:
<?php
setLocale(LC_TIME, 'fr_FR.utf8');
// Nous supposons, ici, que suite à une requête SQL (MySQL)
// et après lecture du résultat
// nous avons $date = '20060201102330.000000' (type DATETIME en "numérique")
$dateAvecMicrosec = '20060201102330.000000';
list($date, $microsec) = explode('.', $dateAvecMicrosec);
$nbSecondes = strToTime($date);
echo ' La date '.$dateAvecMicrosec.' sous le format: '.
     strftime('%A %d %B %Y %H:%M:%S', $nbSecondes).'.'.$microsec;
?>
Après conversion en nombre de secondes, je peux afficher:
 La date 20060201102330.000000 sous le format: mercredi 01 février 2006 10:23:30.000000
Ici vous pouvez apprendre :
1.Introduction
2.Installation de PHP
3.Exécuter un script PHP
4.Configuration et environnement d'exécution de PHP
5.L'environnement de développement
6.Le langage PHP
6.1.Introduction
6.2.Mon premier script
6.3.La syntaxe
6.4.Les boucles (for, while, foreach, do) en PHP
6.5.Les tableaux (array) en PHP
6.6.Les fonctions
6.7.Include
6.8.Programmation orientée objet
6.9.Les fonctions de manipulation de tableaux
6.10.Les dates
6.10.1.Introduction
6.10.2.Les fonctions natives PHP
6.10.2.1.Déterminer la date et heure courante
6.10.2.2.Formatter (i.e. afficher/retourner) une date
6.10.2.3.Convertir une date quelconque en nombre de secondes depuis Epoch
6.10.2.4.Découper (i.e. parser) une chaîne de caractères représentant une date
6.10.2.5.Convertir jour, mois, année, etc. en secondes depuis Epoch avec mktime() ou gmmktime()
6.10.2.6.Contrôler la validité d'une date
6.10.2.7.Le temps à la microseconde près
6.10.2.8.Mise en pratique
6.10.3.Les classes PHP
6.11.Fichiers et répertoires
6.12.Les paramètres d'entrée d'un script PHP
6.13.Utilisation de la librairie graphique
6.14.JpGraph pour tracer courbes et diagrammes
6.15.Utilisation de bases de données avec PHP
6.16.LDAP
6.17.Parser un document XML
6.18.Génération de documents PDF en PHP
6.19.Envoyer un mail
6.20.Créer un webmail avec IMAP
6.21.Droits utilisateurs: chmod 777
6.22.Localization (l10n) et Traduction
7.PHP pour le web
8.Internationalisation (i18n) et encodage en PHP
9.Créer un fichier de logs/traces
10.Déboguer une application PHP
11.Programmer en PHP en toute sécurité
12.Bibilothèque PEAR
13.Zend Framework 2 et 3
14.Installation de Zend Framework 2
15.Joomla
16.Composer
17.PHPUnit
18.PHPDocumentor
19.Mesure de temps d'exécution (benchmark) d'une fonction PHP
20.Exemples de scripts PHP
21.Erreurs fréquentes et les solutions
22.Archives
Version imprimable: imprimer