DateTimeInterface::diff
En esta página
DateTimeInterface::diff
DateTimeImmutable::diff
DateTime::diff
date_diff
Devuelve la diferencia entre dos objetos DateTime
Descripción#
Estilo orientado a objetos
public DateTimeInterface::diff(DateTimeInterface $targetObject, [bool $absolute]): DateInterval
```php
```php
public DateTimeImmutable::diff(DateTimeInterface $targetObject, [bool $absolute]): DateInterval
public DateTime::diff(DateTimeInterface $targetObject, [bool $absolute]): DateInterval
```php
Estilo procedimental
```php
date_diff(DateTimeInterface $baseObject, DateTimeInterface $targetObject, [bool $absolute]): DateInterval
Devuelve la diferencia entre dos objetos DateTimeInterface.
Parámetros#
datetime
La fecha a comparar.
absolute
¿Debería el intervalo forzado a ser positivo?
Valores devueltos#
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.
Ejemplos#
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');
El ejemplo anterior mostrará:
+2 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');
El ejemplo anterior mostrará:
+2 days
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)
Rango de DateTimeInterface::diff
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
Comparación de objetos DateTime
[!NOTE] Los objetos
DateTimeImmutableyDateTimese 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)
Véase también#
DateInterval::format
DateTime::add
DateTime::sub