Il y a quelque temps, j’ai dû créer un système de notification qui averti les clients dont l’abonnement (Woocommerce) arrive à expiration prochainement. J’avais deux informations en ma possession, la date de fin de l’abonnement et la date d’aujourd’hui (date à laquelle tourne le cron, puisqu’il s’agissait d’une tâche automatisée).
J’ai immédiatement pensé à convertir les deux dates en timestamp, faire une soustraction afin d’obtenir le nombre de secondes entre les deux dates et enfin, diviser par 86400 (nombre de secondes dans une journée). Initialement, j’avais quelque chose de ce genre.
<?php
// date de fin de l'abonnement
$subscription_expiration_date = new DateTime("2020-09-09 00:00:00");
// maintenant (au moment où le script est exécuté)
$now_date = new DateTime("now");
// différence des deux timestamps
$diff = $subscription_expiration_date->getTimestamp() - $now_date->getTimestamp();
// calcul du nombre de jours et arrondi inférieur
$diff_in_day = floor($diff / 86400);
// affichage
echo $diff_in_day;
?>
Quelques jours plus tard, la demande a évolué et j’ai dû changer le contenu de certains emails en adaptant le texte afin d’avoir une information sous la forme « Ton abonnement expire dans X mois et Y jours », il fallait donc faire des changements dans le code. Je me suis demandé s’il n’y avait pas quelque chose de tout fait pour avoir les données complètes sur l’écart entre deux dates. En cherchant dans la documentation, je suis tombé sur la méthode diff de la class DateTime qui fait exactement ce que je cherche, c’est-à-dire donner l’intervalle entre deux dates avec des informations sur les jours, mois, années, etc.
Si je reprend l’exemple du dessus, voici mes deux dates (la fonction pre() dans le code est du code custom et permet d’afficher un tableau).
Je me sers maintenant de la méthode diff sur l’objet $now_date et en paramètre je passe l’autre objet $subscription_expiration_date.
Le résultat est un objet DateInterval qui contient les données précises entre deux dates (années, mois, jours, heures, etc.). Grâce à cette méthode, je vais pouvoir adapter le contenu de mon email beaucoup plus facilement, sans avoir besoin de faire de calculs.
29/03/2022
Yann Vangampelaere - nouslesdevs -