(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateTimeInterface::diff -- DateTimeImmutable::diff -- DateTime::diff -- date_diff — Devuelve la diferencia entre dos objetos DateTime
Estilo orientado a objetos
$targetObject, bool $absolute = false): DateInterval$targetObject, bool $absolute = false): DateIntervalEstilo procedimental
$baseObject, DateTimeInterface $targetObject, bool $absolute = false): DateIntervalDevuelve la diferencia entre dos objetos DateTimeInterface.
datetimeLa fecha a comparar.
absolute¿Debería el intervalo forzado a ser positivo?
El objeto DateInterval que representa la diferencia entre dos fechas.
   El parámetro absolute solo afecta
   a la propiedad invert de un
   objeto DateInterval.
  
   El valor devuelto más especificamente, representa el intervalo de tiempo
   que habría que aplicar al objeto original ($this o
   $originObject) para llegar a
   $targetObject. Este proceso no siempre es
   reversible.
  
   El método tiene en cuenta los cambios de horario de verano y, por lo tanto,
   puede devolver un intervalo de 24 horas y 30 minutos,
   como en uno de los ejemplos. Si quieres calcular un tiempo absoluto,
   debes comvertir ambos $this/$baseObject,
   y $targetObject primero a UTC.
  
Ejemplo #1 Ejemplo de DateTime::diff()
Estilo orientado a objetos
<?php
$origin = new DateTimeImmutable('2009-10-11');
$target = new DateTimeImmutable('2009-10-13');
$interval = $origin->diff($target);
echo $interval->format('%R%a days');
?>Estilo procedimental
<?php
$origin = date_create('2009-10-11');
$target = date_create('2009-10-13');
$interval = date_diff($origin, $target);
echo $interval->format('%R%a days');
?>Los ejemplos anteriores mostrarán:
+2 days
Ejemplo #2 DateTimeInterface::diff() durante el cambio de horario de verano
<?php
$originalTime = new DateTimeImmutable("2021-10-30 09:00:00 Europe/London");
$targetTime = new DateTimeImmutable("2021-10-31 08:30:00 Europe/London");
$interval = $originalTime->diff($targetTime);
echo $interval->format("%H:%I:%S (Días completos: %a)"), "\n";
?>El ejemplo anterior mostrará:
24:30:00 (Días completos: 0)
Ejemplo #3 DateTimeInterface::diff() range
    El valor devuelto es la cantidad de tiempo exacto entre
    $this y $targetObject.
    Comparando del 1 de enero al 31 de diciembre devuelve 364 días,
    y no 365 (para años no bisiestos).
   
<?php
$originalTime = new DateTimeImmutable("2023-01-01 UTC");
$targetTime = new DateTimeImmutable("2023-12-31 UTC");
$interval = $originalTime->diff($targetTime);
echo "Días completos: ", $interval->format("%a"), "\n";
?>El ejemplo anterior mostrará:
Días completos: 364
Ejemplo #4 Comparación de objetos DateTime
Nota:
Los objetos DateTime se pueden comparar usando los operadores de comparación.
<?php
$date1 = new DateTime("now");
$date2 = new DateTime("tomorrow");
var_dump($date1 == $date2);
var_dump($date1 < $date2);
var_dump($date1 > $date2);
?>El ejemplo anterior mostrará:
bool(false) bool(true) bool(false)
