PHP Conference Nagoya 2025

Die Klasse DateInterval

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

Einführung

Repräsentiert eine Zeitspanne.

Eine Zeitspanne wird entweder als feste Zeitspanne (in Jahren, Monaten, Tagen, Stunden etc.) oder als relative Zeitangabe in einem Format dargestellt, das vom Konstruktor der Klassen DateTimeImmutable und DateTime unterstützt wird.

Genauer gesagt ist die Information in einem Objekt der Klasse DateInterval eine Anweisung, um von einem Datum/Zeit-Wert zu einem anderen Datum/Zeit-Wert zu kommen. Dieser Prozess ist nicht immer umkehrbar.

Eine übliche Methode, um ein DateInterval-Objekt zu erzeugen, ist die Berechnung des Unterschieds zwischen zwei Datum/Zeit-Objekten durch DateTimeInterface::diff().

Da es keine eindeutig definierte Möglichkeit gibt, Zeitspannen zu vergleichen, sind DateInterval-Instanzen nicht vergleichbar.

Klassenbeschreibung

class DateInterval {
/* Eigenschaften */
public int $y;
public int $m;
public int $d;
public int $h;
public int $i;
public int $s;
public float $f;
public int $invert;
public mixed $days;
/* Methoden */
public __construct(string $duration)
public static createFromDateString(string $datetime): DateInterval|false
public format(string $format): string
}

Eigenschaften

Warnung

Die unten aufgeführten verfügbaren Eigenschaften hängen von der PHP-Version ab und sollten als nur lesbar eingestuft werden.

y

Anzahl der Jahre.

m

Anzahl der Monate.

d

Anzahl der Tage.

h

Anzahl der Stunden.

i

Anzahl der Minuten.

s

Anzahl der Sekunden.

f

Anzahl der Mikrosekunden als Bruchteil einer Sekunde.

invert

Ist 1, wenn die Zeitspanne negativ ist, und sonst 0. Siehe DateInterval::format().

days

Wenn das DateInterval-Objekt durch DateTimeImmutable::diff() oder DateTime::diff() erstellt wurde, dann enthält diese Eigenschaft die Gesamtanzahl der vollen Tage zwischen dem Start- und Enddatum. Ansonsten enthält days den Wert false.

from_string

Wenn das DateInterval-Objekt durch DateInterval::createFromDateString() erstellt wurde, dann ist der Wert dieser Eigenschaft true und die Eigenschaft date_string wird mit Daten belegt. Andernfalls ist der Wert false und die Eigenschaften y bis f, invert, und Tage werden mit Daten belegt.

date_string

Die Zeichenkette, die als Parameter für DateInterval::createFromDateString() verwendet wird.

Changelog

Version Beschreibung
8.2.0 Die Eigenschaften from_string und date_string wurden für DateInterval-Instanzen hinzugefügt, die mit der Methode DateInterval::createFromDateString() erstellt wurden.
8.2.0 Nur die Eigenschaften y bis f, invert und days sind sichtbar.
7.4.0 DateInterval-Instanzen sind nun nicht mehr vergleichbar; bisher wurden alle DateInterval-Instanzen als gleich angesehen.
7.1.0 Die Eigenschaft f wurde hinzugefügt.

Inhaltsverzeichnis

add a note

User Contributed Notes 3 notes

up
39
cb
1 year ago
If you want to reverse a date interval use array_reverse and iterator_to_array. I've found using invert to be unreliable.

<?php
$start_date
= date_create("2021-01-01");
$end_date = date_create("2021-01-05"); // If you want to include this date, add 1 day

$interval = DateInterval::createFromDateString('1 day');
$daterange = new DatePeriod($start_date, $interval ,$end_date);

function
show_dates ($dr) {
foreach(
$dr as $date1){
echo
$date1->format('Y-m-d').'<br>';
}
}

show_dates ($daterange);

echo
'<br>';

// reverse the array

$daterange = array_reverse(iterator_to_array($daterange));

show_dates ($daterange);

?>

Gives
2021-01-01
2021-01-02
2021-01-03
2021-01-04

2021-01-04
2021-01-03
2021-01-02
2021-01-01
up
5
julio dot necronomicon at gmail dot com
10 months ago
More simple example i use to add or subtract.

<?php
$Datetime
= new Datetime('NOW', new DateTimeZone('America/Bahia'));
$Datetime->add(DateInterval::createFromDateString('2 day'));

echo
$Datetime->format("Y-m-d H:i:s");
?>
up
1
edgaras at levinson dot lt
4 months ago
There is a handy way to compare intervals by adding them to 0 dates and comparing dates instead

<?php

function compare(DateInterval $first, DateInterval $second): int
{
$firstDate = (new DateTime())->setTimestamp(0)->add($first);
$secondDate = (new DateTime())->setTimestamp(0)->add($second);

return
$firstDate <=> $secondDate;
}

echo
compare(new DateInterval('P2D'), new DateInterval('PT48H')) . PHP_EOL;
echo
compare(DateInterval::createFromDateString('2 days'), DateInterval::createFromDateString('48 hours')) . PHP_EOL;
echo
compare(DateInterval::createFromDateString('2 days'), DateInterval::createFromDateString('49 hours')) . PHP_EOL;
echo
compare(DateInterval::createFromDateString('2 days'), DateInterval::createFromDateString('47 hours')) . PHP_EOL;

?>

Outputs:
0
0
-1
1
To Top