Le but de ce billet est de montrer un traitement PHP que l'on peut mettre en place afin de récupérer une date antérieure en spécifiant la période écoulée entre celle ci et la date actuelle. Par exemple : quelle date était-il une semaine auparavant ? un mois auparavant ? Une application possible est le recensement d'actions qui se sont produites sur une semaine, comme par exemple le nombre de cartes de voeux virtuelles envoyées et lues comme ici.

Première partie : récupérer la date actuelle.

La fonction php date() permet de récupérer la date actuelle.

  • date('Y') retourne l'année courant à 4 chiffres (ex : 2007)

  • date('d') retourne le jour du mois (ex : 27)

  • date('m') retourne le mois de l'année (ex : 11)

  • date('d-m-Y') retournerait donc : "27-11-2007"

D'autres paramètres pour obtenir les secondes, les heures et bien d'autres options sont décrites ici.

Deuxième partie : récupérer la date passée.

Associé à ce que l'on appelle un "timestamp" (une référence à une date précise), la fonction date permet d'afficher les mêmes informations que nous avons vues précédemment mais pour une date différente de celle en cours.

On définit un timestamp grâce à la fonction mktime() (plus d'info ici)

La syntaxe de mktime est la suivante : mktime(heures, minutes, secondes, mois, jours, années)

A titre d'exemple :mktime(0,0,0,12,10,2007) retourne le timestamp du 10 décembre 2007 à 0h.

mktime comporte un grand avantage : il corrige tout seul les erreurs apparentes de date : mktime(0,0,0,11,31,2007) correspondrait théoriquement au 31 novembre 2007. Or, novembre ne comporte que 30 jours. Ainsi, le timestamp retourné correspond en réalité au 1 décembre 2007 (soit le 30 novembre +1 jour !).

Ainsi, on peut exploiter cette correction automatique des dates afin de remonter dans le temps. En effet, il suffit de définir la date actuelle, et d'en retirer 7 jours pour trouver la date d'il y a une semaine. mktime(0,0,0,date('m'),date('d')-7,date('y')) va donc retourner le timestamp du même jour de la semaine d'avant et ce même si ce jour n'est pas dans le même mois ni dans la même année

Enfin, on réutilise la fonction date afin d'afficher la date du jour correspondant à la semaine d'avant : date("d-m-Y",mktime(0,0,0,date('m'),date('d')-7,date('y')))

On utilisera de même date("d-m-Y",mktime(0,0,0,date('m')-1,date('d'),date('y'))) pour le même jour, le mois d'avant.

L'application dans une base de données SQL et PHP pourrait donc être : mysql_query("SELECT * FROM cartes_envoyées WHERE date_envoi>".date("d-m-Y",mktime(0,0,0,date('m')-1,date('d'),date('y')))) afin de retourner l'ensemble des enregistrements correspondant à des cartes envoyées depuis un mois !