Comparaison de deux objets PHP DateInterval
Publié le 13/07/2022 • Actualisé le 13/07/2022
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