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 !