Tutoriel PHP : combo DateTime / DateInterval / DatePeriod
Dans cet article nous allons voir un exemple d’utilisation très concret des classes PHP DateTime, DateInterval et DatePeriod. L’utilisation combinée de ces classes permet de réaliser des opérations complexes sur les dates avec un minimum de code et surtout avec un code compréhensible.
A noter que PHP 5.3 au minimum est nécessaire pour exécuter le code de ce tutoriel.
Déterminer tous les premier jours du mois entre deux dates
Rentrons donc dans le vif du sujet, au travers de cet exemple nous allons voir comment déterminer la date correspondant au premier jour du mois d’une période donnée. Autrement dit, sur une période démarrant sur la date du jour et terminant un an plus tard, je désire des objets DateTime initialisés sur le premier jour de chaque mois étant compris dans cette période.
// Initialisation d'un DateTime sur la date du jour pour la borne inférieure de la période
$begin = new DateTime(date('Y-m-d'));
// Création d'un DateTime sur la date du jour pour la borne supérieure de la période
$end = new DateTime(date('Y-m-d'));
// Ajout d'un an (P1Y : Plus 1 Year) pour initialiser correctement la borne supérieur de la période
$end->add(new DateInterval('P1Y'));
// Création d'un intervale de temps correspondant au "premier jour du mois d'après"
$interval = DateInterval::createFromDateString('first day of next month');
// Calcul de la période comprise entre la borne inférieure et la borne supérieure cadancée sur mon intervalle de temps (a noter que la date de départ est exclue)
$period = new DatePeriod($begin, $interval, $end, DatePeriod::EXCLUDE_START_DATE);
// Parcours de ma période et affichage de la date correspondante
foreach($period as $dt ) {
echo $dt->format( "l Y-m-d H:i:s" ) . '
';
}
Et voici le résultat de l’exécution du code ci-dessus :
Monday 2013-07-01 00:00:00 Thursday 2013-08-01 00:00:00 Sunday 2013-09-01 00:00:00 Tuesday 2013-10-01 00:00:00 Friday 2013-11-01 00:00:00 Sunday 2013-12-01 00:00:00 Wednesday 2014-01-01 00:00:00 Saturday 2014-02-01 00:00:00 Saturday 2014-03-01 00:00:00 Tuesday 2014-04-01 00:00:00 Thursday 2014-05-01 00:00:00 Sunday 2014-06-01 00:00:00
Nous constatons bien que chaque itération de la boucle foreach positionne un DateTime sur le premier jour du mois pour la période donnée.
C’est tout ! En espérant que ce tutoriel vous soit bénéfique pour la compréhension des DateTime en PHP 😉