Calculer le nombre de mois entre deux dates en PHP

Publié le 15/06/2022 • Actualisé le 15/06/2022


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

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

  Travaillez avec moi !