date_interval_create_from_date_string()
Die Funktion date_interval_create_from_date_string() erstellt ein DateInterval-Objekt aus einer relativen Zeitzeichenkette in PHP.
Was ist date_interval_create_from_date_string()?
Die Funktion date_interval_create_from_date_string() ist eine in PHP eingebaute Funktion, die aus einem menschenlesbaren relativen Zeitstring wie '1 day' oder '2 weeks 3 hours' ein DateInterval-Objekt erstellt. Sie ist der prozedurale Alias der statischen Methode DateInterval::createFromDateString() — beide verhalten sich identisch.
Diese Seite behandelt die Signatur der Funktion, welche Arten von Zeichenketten sie akzeptiert, den Rückgabewert, die wichtige PHP-8.2-Deprecation sowie ausführbare Beispiele zum Hinzufügen und Formatieren von Intervallen.
Deprecation:
date_interval_create_from_date_string()wurde in PHP 8.2 als veraltet markiert und soll in einer zukünftigen Version entfernt werden. Bevorzugen Sie in neuem Code denDateInterval-Konstruktor mit einem ISO-8601-Dauerstring (z. B.new DateInterval('P1D')). Siehe Migration unten.
Syntax
date_interval_create_from_date_string(string $datetime): DateInterval|falseParameter
$datetime— Ein relativer Zeitstring, derselbe Typ, denstrtotime()versteht. Nur die relativen Teile werden verwendet; absolute Teile (ein explizites Datum oder eine Uhrzeit) werden ignoriert.
Rückgabewert
Gibt bei Erfolg ein DateInterval-Objekt zurück, oder false, wenn der string keine relativen Teile enthält, die geparst werden können. Überprüfen Sie den Rückgabewert immer, bevor Sie ihn verwenden.
Wie funktioniert es?
Die Funktion führt den string durch denselben Parser wie strtotime() und behält nur die relativen Teile. Nützliche Formate sind unter anderem:
| String | Resultierendes Intervall |
|---|---|
'1 day' | 1 Tag |
'2 weeks' | 14 Tage |
'1 month 15 days' | 1 Monat, 15 Tage |
'2 hours 30 minutes' | 2 h 30 min |
'-1 week' | -7 Tage |
Ein führendes Minuszeichen (z. B. '-1 week') speichert direkt einen negativen Wert in der entsprechenden Eigenschaft (hier wird d zu -7), sodass das Hinzufügen eines solchen Intervalls zu einem Datum zeitlich rückwärts verschiebt.
Grundlegende Verwendung
<?php
$interval = date_interval_create_from_date_string('1 day');
var_dump($interval->d); // int(1)Hier erstellen wir ein DateInterval, das eine eintägige Zeitspanne repräsentiert; seine Eigenschaft d (Tage) hat den Wert 1.
Beispiele
Beispiel 1: Ein Intervall zu einem Datum hinzufügen
Dieses Beispiel erstellt ein eintägiges Intervall und fügt es mit DateTime::add() einem DateTime-Objekt hinzu:
Ausgabe:
2023-03-04Beispiel 2: Ein Intervall formatieren
Dieses Beispiel erstellt ein einmonatiges Intervall und gibt es mit DateInterval::format() aus. Beachten Sie, dass %m keine führende Null verwendet — verwenden Sie %M, wenn Sie eine führende Null möchten:
Ausgabe:
1 monthsBeispiel 3: Absicherung gegen einen false-Rückgabewert
Wenn der string keine relativen Teile enthält, gibt die Funktion false zurück. Überprüfen Sie das Ergebnis immer, bevor Sie es verwenden:
<?php
$interval = date_interval_create_from_date_string('not an interval');
if ($interval === false) {
echo "Could not parse the interval.";
} else {
echo $interval->format('%d days');
}Ausgabe:
Could not parse the interval.Migration weg von der Funktion
Da die Funktion als veraltet gilt, bevorzugen Sie in neuem Code den DateInterval-Konstruktor. Dieser akzeptiert einen ISO-8601-Dauerstring: P leitet eine Periode ein, und T trennt den Datumsteil vom Zeitteil.
<?php
// Deprecated:
$old = date_interval_create_from_date_string('1 day');
// Recommended replacement:
$new = new DateInterval('P1D'); // P = period, 1D = 1 day
echo $new->format('%d day'); // 1 dayAusgabe:
1 dayHäufige Umwandlungen: '1 day' → P1D, '2 weeks' → P14D, '1 month' → P1M, '2 hours 30 minutes' → PT2H30M.
Tipps zur Performance
- Erstellen Sie ein Intervall einmal und verwenden Sie es wieder; vermeiden Sie das Neu-Erstellen desselben
DateIntervalin engen Schleifen. - Das Parsen eines relativen Strings ist etwas aufwändiger als der Konstruktor; bevorzugen Sie daher
new DateInterval('P1D'), wenn die Dauer fest und im Voraus bekannt ist.
Siehe auch
date_interval_format()— EinDateIntervalfür die Ausgabe formatieren.date_add()— Ein Intervall zu einem Datum hinzufügen.date_diff()— DasDateIntervalzwischen zwei Datumsangaben ermitteln.strtotime()— Der relative Zeitparser, auf den diese Funktion zurückgreift.
Fazit
date_interval_create_from_date_string() wandelt einen relativen Zeitstring in ein DateInterval um und gibt false zurück, wenn der string nicht geparst werden kann. Die Funktion wurde in PHP 8.2 als veraltet markiert, daher sollten Sie in neuem Code den DateInterval-Konstruktor mit einem ISO-8601-Dauerstring bevorzugen (new DateInterval('P1D')). Wenn Sie die Funktion dennoch verwenden, validieren Sie stets den Rückgabewert, bevor Sie das resultierende Objekt nutzen.