(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateTimeInterface::diff -- DateTimeImmutable::diff -- DateTime::diff -- date_diff — Liefert die Differenz zwischen zwei DateTime-Objekten
Objektorientierter Stil
$targetObject
, bool $absolute
= false
): DateInterval$targetObject
, bool $absolute
= false
): DateIntervalProzeduraler Stil
$baseObject
, DateTimeInterface $targetObject
, bool $absolute
= false
): DateIntervalGibt die Differenz zwischen zwei DateTimeInterface-Objekten zurück.
datetime
Das Datum, mit dem verglichen werden soll.
absolute
Soll das Intervall zwingend positiv sein?
Das DateInterval-Objekt stellt die Differenz zwischen den beiden Daten dar.
Der Parameter absolute
wirkt sich nur auf die
Eigenschaft invert
des
DateInterval-Objekts aus.
Genauer gesagt stellt der Rückgabewert das Zeitintervall dar, das auf das
ursprüngliche Objekt ($this
oder
$originObject
) anzuwenden ist, um das
$targetObject
zu erhalten. Dieser Prozess ist nicht
immer umkehrbar.
Die Methode berücksichtigt die Zeitumstellung und kann daher ein Intervall
von 24 Stunden und 30 Minuten
zurückgeben, wie in einem
der Beispiele. Wenn mit absoluter Zeit gerechnet werden soll, müssen die
beiden Parameter
$this
/$baseObject
und
$targetObject
zuerst in UTC umgewandelt werden.
Beispiel #1 DateTimeImmutable::diff()-Beispiel
Objektorientierter Stil
<?php
$origin = new DateTimeImmutable('2009-10-11');
$target = new DateTimeImmutable('2009-10-13');
$interval = $origin->diff($target);
echo $interval->format('%R%a Tage');
?>
Prozeduraler Stil
<?php
$origin = date_create('2009-10-11');
$target = date_create('2009-10-13');
$interval = date_diff($origin, $target);
echo $interval->format('%R%a Tage');
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
+2 Tage
Beispiel #2 DateTimeInterface::diff() während der Zeitumstellung
<?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 (Full days: %a)"), "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
24:30:00 (Full days: 0)
Beispiel #3 Zeitspanne von DateTimeInterface::diff()
Der Wert, den die Methode zurückgibt, ist die genaue Zeitspanne zwischen
$this
und $targetObject
. Der
Vergleich zwischen dem 1. Januar und dem 31. Dezember ergibt also 364 Tage
und nicht 365 (in einem Nicht-Schaltjahr).
<?php
$originalTime = new DateTimeImmutable("2023-01-01 UTC");
$targetTime = new DateTimeImmutable("2023-12-31 UTC");
$interval = $originalTime->diff($targetTime);
echo "Full days: ", $interval->format("%a"), "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Full days: 364
Beispiel #4 Vergleich von DateTime-Objekten
Hinweis:
DateTimeImmutable- und DateTime-Objekte können mit Vergleichs-Operatoren verglichen werden.
<?php
$date1 = new DateTime("now");
$date2 = new DateTime("tomorrow");
var_dump($date1 == $date2);
var_dump($date1 < $date2);
var_dump($date1 > $date2);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(true) bool(false)