DateTimeInterface::diff

DateTimeImmutable::diff

DateTime::diff

date_diff

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

DateTimeInterface::diff -- DateTimeImmutable::diff -- DateTime::diff -- date_diffDevuelve la diferencia entre dos objetos DateTime

Descripción

Estilo orientado a objetos

public DateTimeInterface::diff(DateTimeInterface $targetObject, bool $absolute = false): DateInterval
public DateTimeImmutable::diff(DateTimeInterface $targetObject, bool $absolute = false): DateInterval
public DateTime::diff(DateTimeInterface $targetObject, bool $absolute = false): DateInterval

Estilo por procedimientos

date_diff(DateTimeInterface $baseObject, DateTimeInterface $targetObject, bool $absolute = false): 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 #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 por procedimientos

<?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 resultado de los ejemplos sería:

+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 resultado del ejemplo sería:

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 resultado del ejemplo sería:

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 resultado del ejemplo sería:

bool(false)
bool(true)
bool(false)

Ver también

  • DateInterval::format() - Formatea el intervalo
  • DateTime::add() - Modifica un objeto DateTime, añadiendo una cantidad de días, meses, años, horas, minutos y segundos
  • DateTime::sub() - Sustrae una cantidad de días, meses, años, horas, minutos y segundos de un objeto DateTime
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top