Il existe de très nombreuses fonctions de manipulation des dates. Utilisées sur des champs de type
DATE ou
DATETIME 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 dans la
documentation de MySQL sur les dates au besoin. Cette introduction aux dates devrait être suffisante pour que vous puissiez vous débrouiller tous 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, 99% du temps vous souhaiterez enregistrer la date actuelle. Pour cela, rien de plus simple avec la fonction
NOW() :
Code : SQL | INSERT INTO minichat(pseudo, message, date) VALUES('Mateo', 'Message !', NOW())
|
La date sera alors automatiquement remplacée par la date et l'heure actuelle, 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 :
Code : SQL | SELECT pseudo, message, DAY(date) AS jour FROM minichat
|
On récupèrera 3 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.
Code : SQL | 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 :
Code : SQL | 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 dans l'ordre que l'on souhaite en PHP à l'aide du découpage en champs qu'on vient de faire :
Code : PHP | <?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 :
Code : SQL | 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 soustraire des heures, minutes, secondes, jours, mois ou années à une date. Il faut envoyer 2 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. Cette date correspond à la date où a été posté le message + 15 jours. Voici comment écrire la requête :
Code : SQL | 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 MONTH, YEAR, HOUR, MINUTE, SECOND, etc. Par conséquent, si vous souhaitez que les messages expirent dans 2 mois :
Code : SQL | SELECT pseudo, message, DATE_ADD(date, INTERVAL 2 MONTH) AS date_expiration FROM minichat
|
Juste un petit rappel pour être sûr qu'on se comprend bien : cette requête ne commande pas la suppression des messages dans 2 mois ! On crée juste un champ virtuel date_expiration qui correspond à la date du message + 2 mois. Cela serait utile pour informer l'utilisateur quand son message va expirer, mais ce serait à vous de faire en sorte que votre site supprime le message au bout de 2 mois !