Les fonctions de gestion des dates



Il existe de très nombreuses fonctions de manipulation des dates. Utilisées sur des champs de type DATE ouDATETIME par exemple, elles permettent d'extraire très facilement toutes sortes d'informations utiles sur les dates, comme l'année, le numéro du jour du mois, le numéro du jour dans l'année, etc. Il est aussi possible d'effectuer des opérations sur les dates.

Il est impossible de lister toutes les fonctions de gestion des dates, mais vous trouverez la liste complète de celles-ci dans la documentation de MySQL au besoin. Cette introduction aux dates devrait être suffisante pour que vous puissiez vous débrouiller tout seuls par la suite.


NOW() : obtenir la date et l'heure actuelles

C'est probablement une des fonctions que vous utiliserez le plus souvent. Lorsque vous insérez un nouveau message dans la base, vous souhaiterez enregistrer la date actuelle les 99 % du temps. Pour cela, rien de plus simple avec la fonction NOW() :

INSERT INTO minichat(pseudo, message, date) VALUES('Mateo', 'Message !', NOW())

La date sera alors automatiquement remplacée par la date et l'heure actuelles au format AAAA-MM-JJ HH:MM:SS.


Notez qu'il existe aussi les fonctions CURDATE() et CURTIME() qui retournent respectivement uniquement la date (AAAA-MM-JJ) et l'heure (HH:MM:SS).


DAY()MONTH()YEAR() : extraire le jour, le mois ou l'année

Extraire des informations d'une date ? C'est facile ! Voici un exemple d'utilisation :

SELECT pseudo, message, DAY(date) AS jour FROM minichat

On récupèrera trois champs : le pseudo, le message et le numéro du jour où il a été posté.


HOUR()MINUTE()SECOND() : extraire les heures, minutes, secondes

De la même façon, avec ces fonctions il est possible d'extraire les heures, minutes et secondes d'un champ de type DATETIME ou TIME.

SELECT pseudo, message, HOUR(date) AS heure FROM minichat


DATE_FORMAT : formater une date

Avec les fonctions que l'on vient de découvrir à l'instant, on pourrait extraire tous les éléments de la date, comme ceci :

SELECT pseudo, message, DAY(date) AS jour, MONTH(date) AS mois, YEAR(date) AS annee, HOUR(date) AS heure, MINUTE(date) AS minute, SECOND(date) AS seconde FROM minichat


On pourrait ensuite afficher la date en PHP dans l'ordre que l'on souhaite à l'aide du découpage en champs que l'on vient de faire :

<?php

echo $donnees['jour'] . '/' . $donnees['mois'] . '/' . $donnees['annee'] . '...';

?>


C'est cependant un peu compliqué, et il y a plus simple. La fonction DATE_FORMAT vous permet d'adapter directement la date au format que vous préférez. Il faut dire que le format par défaut de MySQL (AAAA-MM-JJ HH:MM:SS) n'est pas très courant en France.


Voici comment on pourrait l'utiliser :

SELECT pseudo, message, DATE_FORMAT(date, '%d/%m/%Y %Hh%imin%ss') AS date FROM minichat

Ainsi, on récupèrerait les dates avec un champ nommé date sous la forme 11/03/2010 15h47min49s.


Comment ça marche, ce bazar ?


Les symboles %d%m%Y (etc.) sont remplacés par le jour, le mois, l'année, etc. Les autres symboles et lettres sont affichés tels quels.

Il existe beaucoup d'autres symboles pour extraire par exemple le nom du jour (la plupart du temps en anglais malheureusement, comme « Saturday »), le numéro du jour dans l'année, etc. La liste des symboles disponibles est dans la doc' à la section DATE_FORMAT.


DATE_ADD et DATE_SUB : ajouter ou soustraire des dates

Il est possible d'ajouter ou de soustraire des heures, minutes, secondes, jours, mois ou années à une date. Il faut envoyer deux paramètres à la fonction : la date sur laquelle travailler et le nombre à ajouter ainsi que son type.

Par exemple, supposons que l'on souhaite afficher une date d'expiration du message. Celle-ci correspond à « la date où a été posté le message + 15 jours ». Voici comment écrire la requête :

SELECT pseudo, message, DATE_ADD(date, INTERVAL 15 DAY) AS date_expiration FROM minichat


Le champ date_expiration correspond à « la date de l'entrée + 15 jours ». Le mot-clé INTERVAL ne doit pas être changé ; en revanche, vous pouvez remplacer DAY par MONTHYEARHOURMINUTESECOND, etc. Par conséquent, si vous souhaitez indiquer que les messages expirent dans deux mois :

SELECT pseudo, message, DATE_ADD(date, INTERVAL 2 MONTH) AS date_expiration FROM minichat


En résumé

  • MySQL propose plusieurs types de champs pour stocker des dates.
  • Les deux types les plus couramment utilisés sont :
    • DATE : stocke une date au format AAAA-MM-JJ ;
    • DATETIME : stocke une date et une heure au format AAAA-MM-JJ HH:MM:SS.
  • On peut trier et filtrer des champs contenant des dates comme s'il s'agissait de nombres.
  • Il existe de nombreuses fonctions SQL dédiées au traitement des dates. La plus connue est NOW() qui renvoie la date et l'heure actuelles.

Créé avec HelpNDoc Personal Edition: Convertissez facilement vos fichiers d'aide WinHelp HLP en CHM avec le guide étape par étape de HelpNDoc