Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox



Jouer avec les dates en PHP et en Mysql

Compatible PHP. Cliquer pour en savoir plus sur les compatibilités.Par solarweb (Guillaume Hautbois), le 09 avril 2008

Ce tutoriel à pour but de faire un tour assez global des possibilités et pratiques pour gérer les dates en PHP et Mysql.

1 - Les formats de dates

Il existe pas mal de formats différents pour les dates, notamment en fonction de la langue, il y a donc des normes qui existent pour définir un format fixe, on utilise le plus couramment pour développer :

  • Le timestamp
  • Le format ISO/US

Il est important de connaître ces deux formats car l'on passe souvent de l'un à l'autre pour faire des calcul, affichage de dates.

1.1 - Le timestamp

Aussi appelé Unix Timestamp, il correspond au nombre de secondes écoulées depuis le 1er Janvier 1970.

Exemple, nous sommes le 09/04/2008 et il est 14:04:21, le timestamp correspondant est : 1207742661.

1.2 - Le format ISO/US

Le format de date ISO le plus utilisé est le suivant : “AAAA-MM-JJ HH:mm:ss”, on l'utilise aussi sans l'heure : “AAAA-MM-JJ”.

  • Y : Année
  • M : Mois
  • J : Jour
  • H : Heure
  • m : Minutes
  • s : Secondes

Exemple pour la date d'écriture de cet article : 2008-04-09 14:04:21

2 - Utilisation des dates en PHP

2.1 - Les fonctions les plus utilisées

  • date() - C'est la fonction la plus utile, elle permet d'afficher la date du jour ou une date passée en paramètre en timestamp dans un format souhaité. Pour plus d'information, rendez-vous sur la doc php : http://fr.php.net/date.
  • strtotime() - Cette fonction permet de convertir une date au format ISO/US en timestamp.
  • strftime() - Cette fonction est très proche de date() mais permet une gestion de l'écriture des noms de jours, de mois… dans la langue “locale”.
  • setlocale() - Cette fonction permet de choisir la langue d'affichage de données en PHP, dans notre exemple avec LC_TIME nous controllerons la langue de strftime().
  • mktime() - Cette fonction permet de créer une date en timestamp à partir des numéro de jours, de mois…

2.2 - Quelques opérations de base

2.2.1 - Afficher la date à partir d'un timestamp

// Affiche : 09/04/2008 14:04:21
echo date("d/m/Y H:i:s", 1207742661)

2.2.2 - Afficher un format "français" à partir d'un format ISO/US

// Affiche : 09/04/2008
echo date("d/m/Y", strtotime("2008-04-09"));

2.2.3 - Afficher la date en français

// Affiche : Nous sommes le Mercredi 9 Avril 2008 et il est 14h04.
setlocale(LC_TIME, "fr_FR", "fr_FR@euro", "fr", "FR", "fra_fra", "fra");
echo "Nous sommes le ".strftime("%A %d %B %Y et il est %Hh%M", 1207742661)

2.2.4 - Faire des calculs de date

Nous allons dans cet exemple chercher la date d'il y a 3 ans et 6 mois et 43 jours, sans faire de calculs savants.

// Affiche : 27/08/2004 14:34:30
$time = mktime(date("H"), date("i"), date("s"), date("m")-6, date("d")-43, date("Y")-3);
echo date("d/m/Y H:i:s", $time);

A noter que si vous partez d'une autre date vous pouvez la passer en paramètre de la fonction date() en timestamp.

mktime(date("H", 1207742661), date("i", 1207742661)...

2.3 - Conclusion en PHP

Il est donc préférable en PHP, si vous partez d'un format “folklorique”, du type 09/04/2008, de le transformer en ISO pour pouvoir en faire ce que vous voulez après.

$tmp = explode("/", "09/04/2008");
$date_iso = $tmp[2]."-".$tmp[1]."-".$tmp[0];

3 - Utilisation des dates en Mysql

3.1 - Le stockage des dates

C'est LA grande question pour la gestion des dates en Mysql, on nous propose en effet en type de champs “timestamp, time, date et datetime”.

Date et datetime correspondent au format ISO/US présenté plus haut, le datetime stockant aussi l'heure.

Et bien je répondrais que c'est un peu au choix du développeur, certain préfèrent stocker du timestamp, d'autre (comme moi) préfèrent stocker un format ISO.

Je commenterais donc de manière totalement subjective mon choix de stocker un format ISO:

3.2 - Quelques fonctions utiles

Je ne vais pas aller très loin sur ce paragraphe Mysql mais voici quand même quelques fonctions utiles assez souvent pour insérer et sélectionner des dates.

3.2.1 - Insérer une date ISO dans la base de donnée.

En supposant que le champs “date_test” est en DATE ou en DATETIME

INSERT INTO date_test VALUES (NOW());

3.2.2 - Sélectionnez une partie de date

Exemple : On cherche les lignes d'avril

SELECT * FROM matable WHERE MONTH(date_test) = 4;

3.2.3 - Calcul de dates dans une requete Mysql

Il est parfois inutile de recourir au PHP pour faire des calculs de date, Mysql propose ses propres fonctions comme DATE_ADD() et DATE_SUB()

Plus d'informations sur la page complète d'utilisation des fonctions de dates Mysql :

http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-functions.html

Conclusion

Il est possible de faire beaucoup de conversions et de calculs avec les fonctions de base proposées en PHP et en Mysql, rien ne sert de se compliquer comme dans le tutoriel suivant : Convertir une date timestamp en format français avec PHP

En savoir plus