

L’autre jour – pendant un moment d’égarement on dira – je cherchais à comparer 2 dates en PHP. Je l’avais 50 fois mais je ne me rappelais plus comment je me débrouillais pour le faire simplement. Les dites dates étant issues de champs de type datetime d’une table gérer avec MySQL. Je voulais juste savoir si la date était dans le futur ou dans le passé. Pas compliqué hein ^^.
Je suis donc allé faire ma petite recherche « comparer 2 dates php » sur mon ami Google … et là c’est le drame !
J’ai vu de tout, un truc de fou. Des mecs qui disaient qu’il fallait inclure une classe qui pesait à elle seule 30ko de code juste pour créer un objet et appeler une fonction de différenciation, des explode() sur la date mysql avec calcul du timestamp puis comparaison avec la fonction time() de PHP etc. Hallucinant, tout ça pour 2 dates !
MySQL est quand même bien plus pratique et surtout a la fois plus puissant et plus léger pour un serveur que PHP.
J’avais juste une date stockée en datetime et je voulais savoir si elle était future ou passée. Rien de bien énorme quoi. La petite requête qui va bien ci-dessous :
SELECT (UNIX_TIMESTAMP(ma_date) - UNIX_TIMESTAMP()) AS passe_futur FROM ma_table
C’est aussi simple que ça !
En gros, on demande à Mysql de convertir en timestamp unix le champ date. Ce timestamp obtenu, on lui déduit le timestamp actuel. Si le chiffre est positif c’est dans le futur, si il est négatif c’est dans le passé.
Après, vu qu’un timestamp on sait que c’est un nombre de secondes on a plus qu’a diviser par 60 si on veux des minutes, par 3600 si on veux des heures etc. (ndlr : Timestamp Unix = nombre de secondes écoulées depuis le 1er janvier 1970).
Bref, pas besoin de mettre 50ko de code et d’appeler 50 fonctions pour ça !
EDIT : Il y a bien sur, des centaines de fonctions natives dans mysql permettant de comparer des dates directement sans passer par le timestamp. Je les utilise souvent d’ailleurs. Elles feront l’objet d’un autre billet







