Calculer le nombre de mois entre deux dates en PHP
Publié le 15/06/2022 • Mis à jour le 15/06/2022
Dans ce bout de code, nous voyons comment calculer le nombre de mois entre deux dates en PHP. Ici, on ne prend pas du tout en compte les jours. Par exemple, c'est utile pour vérifier quand une carte bleue expire (une carte bleue est valide jusqu'au dernier jour du mois de sa date d'expiration). Le premier exemple utilise uniquement PHP, et le second utilise la librairie de dates Carbon. Il peut être complexe de faire les calculs de date ; je préfère généralement m'appuyer sur une librairie existante. Comme vous pouvez le voir, ça rend aussi le code bien plus concis et lisible.
<?php
declare(strict_types=1);
namespace App\Controller\Snippet;
use Carbon\Carbon;
/**
* J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
* Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
* ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
* Les services sont injectés dans le constructeur du contrôleur principal.
*/
trait Snippet204Trait
{
public function snippet204(): void
{
// PHP
$date1 = new \DateTime('2022-06-15');
$date2 = new \DateTime('2022-07-01');
$date3 = new \DateTime('now');
$year1 = (int) $date1->format('Y');
$year2 = (int) $date2->format('Y');
$year3 = (int) $date3->format('Y');
$month1 = (int) $date1->format('m');
$month2 = (int) $date2->format('m');
$month3 = (int) $date3->format('m');
$diff2 = (($year2 - $year1) * 12) + ($month2 - $month1);
$diff3 = (($year3 - $year1) * 12) + ($month3 - $month1);
echo sprintf('Diff in month from %s to %s: ', $date1->format('Y-m'), $date2->format('Y-m')).$diff2.PHP_EOL;
echo sprintf('Diff in month from %s to now: ', $date1->format('Y-m')).$diff3.PHP_EOL.PHP_EOL;
// Carbon
$date4 = new Carbon('2022-06-15');
$date5 = new Carbon('2022-07-01');
$date6 = Carbon::now();
$diff5 = (($date5->year - $date4->year) * 12) + ($date5->month - $date4->month);
$diff6 = (($date6->year - $date4->year) * 12) + ($date6->month - $date4->month);
echo sprintf('Diff in month from %s to %s: ', $date4->format('Y-m'), $date5->format('Y-m')).$diff5.PHP_EOL;
echo sprintf('Diff in month from %s to now: ', $date4->format('Y-m')).$diff6.PHP_EOL;
// That's it! 😁
}
}
Exécuter le snippet Plus sur Stackoverflow Lire la doc Plus sur le web Snippet aléatoire