(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.
datetimeDas Datum, mit dem verglichen werden soll.
absoluteSoll 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)