MySQL : Formater une date
Par Damien, mardi 8 mars 2005 à 20:24 :: Bases de données :: #20 :: rss
La question revient souvent, comment peut-on formater une date MySQL ? Il y a plusieurs solutions, que nous allons présenter.
1- Avant propos
Lorsque l'on shouhaite stocker des dates dans MySQL on utilise bien souvent des champs de type DATE. MySQL les représente sous cette forme : AAAA-MM-JJ. Autrement-dit "2005-02-24" représente le 24 février 2005.
A première vue on peut trouver ceci stupide, mais non, ce n'est pas stupide du tout. C'est en effet le meilleur format pour trier les dates : d'abord l'année, puis le mois, puis le jour.
C'est par contre embettant au niveau de l'affichage. Voici donc comment s'en sortir.
2- Directement depuis MySQL
On peut tout d'abord demander tout simplement à MySQL de retourner la date sous un autre format. Pour cela on peut utiliser la fonction MySQL DATE_FORMAT().
DATE_FORMAT(date, format)
Cette fonction formate la date en fonction de la chaine format.
Voici les options de format possibles :
| Elément | Description |
| %M | Nom du mois (January à December) |
| %W | Nom du jour (Sunday à Saturday) |
| %D | Jour avec suffixe en anglais (1st, 2nd, 3rd, etc.) |
| %Y | Année, sur 4 chiffres |
| %y | Année, sur 2 chiffres |
| %X | Année pour la semaine où Dimanche est le premier jour de la semaine, sur 4 chiffres, utilisé avec ''%V' |
| %x | Année pour la semaine où Lundi est le premier jour de la semaine, sur 4 chiffres, utilisé avec ''%v' |
| %a | Nom du jour, court (Sun à Sat) |
| %d | Jour (00 à 31) |
| %e | Jour (0 à 31) |
| %f | Microseconde (000000..999999) * A partir de MySQL 4.1.1 |
| %m | Mois (01 à 12) |
| %c | Mois (1 à 12) |
| %b | Nom du mois, court (Jan à Dec) |
| %j | Jour de l'année (001..366) |
| %H | Heure (00 à 23) |
| %k | Heure (0 à 23) |
| %h | Heure (01 à 12) |
| %I | Heure (01 à 12) |
| %l | Heure (1 à 12) |
| %i | Minutes (00 à 59) |
| %r | Heure au format 12-heures (hh:mm:ss [AP]M) |
| %T | Heure au format 24-heures (hh:mm:ss) |
| %S | Secondes (00 à 59) |
| %s | Secondes (00 à 59) |
| %p | AM ou PM |
| %w | Numéro du jour de la semaine (0=Dimanche à 6=Samedi) |
| %U | Numéro de semaine (0 à 53), où Dimanche est le premier jour de la semaine. |
| %u | Numéro de semaine (0 à 53), où Lundi est le premier jour de la semaine. |
| %V | Numéro de semaine (1 à 53), où Dimanche est le premier jour de la semaine. Utilisé avec '%X' |
| %v | Numéro de semaine (1 à 53), où Lundi est le premier jour de la semaine. Utilisé avec '%x' |
| %% | Caractère % . |
Remarque : A partir de MySQL 3.23, le signe % est obligatoire, alors qu'il n'était qu'optionnel pour les versions précédentes.
Exemple :
SELECT DATE_FORMAT('2000-11-26','%d-%m-%Y')
3- A l'aide de PHP
Nous avons donc vu que MySQL permettait de formater les dates. Mais en règle générale il vaut mieux faire travailler PHP que MySQL, d'autant plus que PHP permet de faire plus de choses.
La fonction substr()
Retourne la portion de la chaîne chaine, commençant à la position debut, sur une longueur (optionnel) longueur.
chaine substr (chaine chaine, entier debut [, entier longueur])
Exemple :
<?php // intialisation $date = "2005-02-26"; // découpage // affichage ?>
La fonction explode()
Retourne un tableau contenant les éléments d'une chaîne chaine séparés par un séparateur separateur.
tableau explode (chaine separateur, chaine chaine [, entier limite])
Le paramètre optionnel limite permet de limiter la taille du tableau.
Exemple :
<?php // intialisation $date = "2005-02-26"; // on en fait un tableau // on formate $annee = $tableau[0]; $mois = $tableau[1]; $jour = $tableau[2]; // affichage ?>
Conjointement à la fonction explode(), on peut également utiliser l'opérateur list().
Exemple :
<?php // intialisation $date = "2005-02-26"; // formatage // affichage ?>
Les expressions régulières
Comme le précise très justement Bertrand dans les commentaires, on peut également utiliser les expressions régulières (voir le tutorial sur les expressions régulières) :
<?php // initialisation $date = "2005-02-26"; //affichage ?>


Commentaires
1. Le mercredi 9 mars 2005 à 09:34, par Bertrand
2. Le lundi 21 mars 2005 à 23:08, par François
3. Le mercredi 6 avril 2005 à 13:22, par Kam
4. Le lundi 9 mai 2005 à 19:05, par Pierre
5. Le vendredi 13 mai 2005 à 16:26, par emap
6. Le mercredi 19 avril 2006 à 22:14, par claude
7. Le lundi 1 mai 2006 à 11:55, par marco
8. Le samedi 12 août 2006 à 17:14, par Heian
9. Le mercredi 25 avril 2007 à 11:41, par Gyzmo
10. Le lundi 14 mai 2007 à 16:16, par aandre2937
11. Le lundi 6 août 2007 à 09:07, par Lucien
12. Le samedi 5 janvier 2008 à 00:28, par test qi
13. Le mercredi 30 janvier 2008 à 10:46, par adan
14. Le vendredi 29 février 2008 à 22:30, par navartus
15. Le samedi 12 avril 2008 à 17:37, par doume65
16. Le samedi 12 avril 2008 à 17:42, par Doume
17. Le dimanche 20 avril 2008 à 23:30, par agora
18. Le samedi 2 août 2008 à 15:16, par Apprenti
Ajouter un commentaire