Comparaison de deux objets PHP DateInterval

Publié le 13/07/2022 • Actualisé le 13/07/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 comparer deux objets PHP DateInterval. On ne peut directement utiliser l'opérateur spaceship ou l'on obtient l'erreur : 'Warning: Cannot compare DateInterval objects'. Une méthode simple est d'ajouter les deux intervalles à la date courante et de comparer les dates obtenues ; cette fois, on peut bien utiliser l'opérateur spaceship <=>.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

/**
 * 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 Snippet210Trait
{
    public function snippet210(): void
    {
        $interval1 = new \DateInterval('P1W');
        $interval2 = new \DateInterval('P2W');

        echo $this->compareDateIntervals($interval1, $interval2).PHP_EOL;
        echo $this->compareDateIntervals($interval2, $interval1).PHP_EOL;
        echo $this->compareDateIntervals($interval1, $interval1).PHP_EOL;

        // That's it! 😁
    }

    private function compareDateIntervals(\DateInterval $i1, \DateInterval $i2): int
    {
        $dateRef = new \DateTimeImmutable();

        return $dateRef->add($i1) <=> $dateRef->add($i2);
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc  Snippet aléatoire

  Travaillez avec moi !