DateTimeImmutable::createFromFormat
date_create_immutable_from_format
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
DateTimeImmutable::createFromFormat -- date_create_immutable_from_format — Wertet eine Zeitangabe gemäß dem angegebenen Format aus
Beschreibung
Objektorientierter Stil
$format, string $datetime, ?DateTimeZone $timezone = null): DateTimeImmutable|falseProzeduraler Stil
$format, string $datetime, ?DateTimeZone $timezone = null): DateTimeImmutable|false
Gibt ein neues DateTimeImmutable-Objekt zurück.
Es stellt das Datum und die Uhrzeit dar, die in der Zeichenkette
datetime angegeben sind und gemäß dem angegebenen
format formatiert wurden.
Parameter-Liste
-
format -
Das Format, in dem der übergebene String sein soll. Siehe die nachfolgenden Formatierungsoptionen. In den meisten Fällen können die gleichen Buchstaben verwendet werden wie für die Funktion date().
Alle Felder werden mit den aktuellen Werten für Datum und Uhrzeit initialisiert. In den meisten Fällen wird man diese auf "Null" zurücksetzen wollen (die Unix-Epoche,
1970-01-01 00:00:00 UTC). Dies wird erreicht, indem das Zeichen!als erstes Zeichen in den Parameterformateingefügt wird, oder|als letztes Zeichen. Weitere Informationen zu den einzelnen Zeichen sind in der folgenden Beschreibung zu finden.Das Format wird von links nach rechts ausgewertet, was bedeutet, dass die Reihenfolge, in der die Formatzeichen angeordnet sind, in manchen Situationen das Ergebnis beeinflusst. Im Fall von
z(der Tag des Jahres) ist es erforderlich, dass bereits ein Jahr ausgewertet wurde, zum Beispiel durch die ZeichenYodery.Buchstaben, die für die Auswertung von Zahlen verwendet werden, lassen eine große Bandbreite von Werten zu, die außerhalb des logischen Bereichs liegen. Zum Beispiel akzeptiert das
d(Tag des Monats) Werte im Bereich von00bis99. Die einzige Einschränkung betrifft die Anzahl der Ziffern. Wenn ein Wert außerhalb des Bereichs angegeben wird, wird der Überlaufmechanismus des Parsers für Datum und Uhrzeit verwendet. Im Folgenden sind einige Beispiele für dieses Überlaufverhalten aufgeführt.Die folgenden Zeichen werden in der Parameterzeichenkette formaterkanntformat-ZeichenBeschreibung Beispiele zulässiger Werte Tag --- --- dundjTag des Monats; zwei Ziffern mit oder ohne vorangestellter Null 01bis31oder1bis31(2-stellige Zahlen, die höher sind als die Anzahl der Tage im Monat, werden akzeptiert, führen aber zu einem Überlauf des Monats. Zum Beispiel bedeutet die 33 bei Januar den 2. Februar)DundlTextuelle Darstellung eines Tages MonbisSunoderSonntagbisSamstag. Wenn der angegebene Tagesname vom ausgewerteten (oder voreingestellten) Datum abweicht, kommt es zu einem Überlauf bis zum nächsten Datum mit dem angegebenen Tagesnamen. Siehe die Beispiele unten für eine Erklärung.SEnglisches Ordnungssuffix für einen Tag des Monats; zwei Buchstaben. Es wird bei der Auswertung ignoriert. st,nd,rdoderth.zTag des Jahres (beginnend bei 0); es muss ein Yoderyvorangestellt werden.0bis365(es können auch dreistellige Zahlen angegeben werden, die größer sind als die Anzahl der Tage in einem Jahr; in diesem Fall wird die Differenz auf das nächste Jahr übertragen. Zum Beispiel bedeutet 366 in Verbindung mit 2022 den 2. Januar 2023)Monat --- --- FundMTextuelle Darstellung eines Monats, z.B. January oder Sept JanuarybisDecemberoderJanbisDecmundnNumerische Darstellung eines Monats; mit oder ohne vorangestellter Null 01bis12oder1bis12(es können auch zweistellige Zahlen größer als 12 angegeben werden; in diesem Fall wird die Differenz auf das nächste Jahr übertragen. Zum Beispiel bedeutet 13 den Januar des nächsten Jahres)Jahr --- --- XundxVollständige numerische Darstellung einer Jahreszahl; bis zu 19 Ziffern, optional mit vorangestelltem +oder-Beispiele: 0055,787,1999,-2003,+10191YVollständige numerische Darstellung einer Jahreszahl; bis zu vier Ziffern Beispiele: 0055,787,1999,2003yEine zweistellige Jahreszahl (für den Bereich 1970-2069). Beispiele: 99oder03(werden interpretiert als1999bzw.2003)Zeit --- --- aundAAnte meridiem (vor Mittag) und post meridiem (nach Mittag) amoderpmgundhStunde im 12-Stunden-Format; mit oder ohne vorangestellter Null 1bis12oder01bis12(es können auch zweistellige Zahlen größer als 12 angegeben werden; in diesem Fall wird die Differenz auf den nächsten Tag übertragen.14bedeutet zum Beispiel02im nächsten AM/PM-Zeitraum)GundHStunde im 24-Stunden-Format; mit oder ohne vorangestellter Null 0bis23oder00bis23(es können auch zweistellige Zahlen größer als 24 angegeben werden; in diesem Fall wird die Differenz auf den nächsten Tag übertragen.26bedeutet zum Beispiel02:00am nächsten Tag)iMinuten; mit vorangestellter Null 00to59(es können auch zweistellige Zahlen größer als 59 angegeben werden; in diesem Fall wird die Differenz auf die nächste Stunde übertragen.66bedeutet zum Beispiel:06in der nächsten Stunde)sSekunden; mit vorangestellter Null 00bis59(es können auch zweistellige Zahlen größer als 59 angegeben werden; in diesem Fall wird die Differenz auf den nächsten Tag übertragen.90bedeutet zum Beispiel:30in der nächsten Minute)vBruchteil in Millisekunden (bis zu drei Ziffern) Beispiel: 12(0.12Sekunden),345(0.345Sekunden)uBruchteil in Mikrosekunden (bis zu sechs Ziffern) Beispiel: 45(0.45Sekunden),654321(0.654321Sekunden)Zeitzone --- --- e,O,PundTBezeichner der Zeitzone, Differenz zu UTC (in Stunden), Differenz zu UTC (mit Doppelpunkt zwischen Stunden und Minuten) oder Zeitzonenkürzel Beispiele: UTC,GMT,Atlantic/Azores,+0200,+02:00,EST,MDTDatum und Uhrzeit in voller Länge --- --- USekunden seit der Unix-Epoche (1. Januar 1970 00:00:00 GMT) Beispiel: 1292177455Whitespace und Trennzeichen --- --- (Leerraum)Ein Leerzeichen oder Tabulatorzeichen Beispiel: #Eins der folgenden Trennzeichen: ;,:,/,.,,,-,(oder)Beispiel: /;,:,/,.,,,-,(oder)Das angegebene Zeichen Beispiel: -?Ein beliebiges Byte Beispiel: ^(es ist zu beachten, dass für UTF-8-Zeichen möglicherweise mehr als ein?benötigt wird. In diesem Fall ist es wahrscheinlich besser,*zu verwenden)*Beliebige Bytes bis zum nächsten Trennzeichen oder zur nächsten Ziffer Beispiel: *inY-*-dentspricht in Verbindung mit der Zeichenkette2009-aWort-08dem WertaWort!Setzt alle Felder (Jahr, Monat, Tag, Stunde, Minute, Sekunde, Bruchteil und Zeitzone) auf ihre Ausgangswerte zurück ( 0bei Stunde, Minute, Sekunde und Bruchteil;1bei Monat und Tag;1970bei Jahr undUTCbei der Zeitzone)Ohne !werden alle Felder auf das aktuelle Datum und die aktuelle Uhrzeit gesetzt.|Setzt die Werte der noch nicht ausgewerteten Felder (Jahr, Monat, Tag, Stunde, Minute, Sekunde, Zeitzone) auf ihre Ausgangswerte zurück Y-m-d|setzt Jahr, Monat und Tag entsprechend der Informationen aus der ausgewerteten Zeichenkette und setzt Stunde, Minute und Sekunde auf 0+Wenn dieses Formatzeichen verwendet wird, führen nachfolgende Daten in der Zeichenkette nicht zu einem Fehler, sondern zu einer Warnung Um zu überprüfen, ob nachfolgende Daten vorhanden waren, kann DateTimeImmutable::getLastErrors() verwendet werden. Wenn die Formatzeichenkette Zeichen enthält, die nicht erkannt werden, schlägt die Auswertung fehl und es wird eine Fehlermeldung an die zurückgegebene Struktur angehängt. Die Fehlermeldungen können mit DateTimeImmutable::getLastErrors() abgefragt werden.
Wenn literale Zeichen in
formatverwendet werden, müssen diese mit einem Backslash (\) maskiert werden.Wenn
formatnicht das Zeichen!enthält, werden die Teile des Datums und der Uhrzeit, die nicht informatangegeben sind, auf die aktuelle Systemzeit gesetzt.Wenn
formatdas Zeichen!enthält, werden die Teile des Datums und der Uhrzeit, die nicht informatangegeben sind, sowie die Werte links von!auf die entsprechenden Werte der Unix-Epoche gesetzt.Wenn ein Zeichen der Uhrzeit ausgewertet wird, werden alle anderen zeitbezogenen Felder auf "0" gesetzt, sofern sie nicht ebenfalls ausgewertet werden.
Die Unix-Epoche ist 1970-01-01 00:00:00 UTC.
-
datetime -
Eine Zeichenkette, die die Zeit angibt.
-
timezone -
Ein DateTimeZone-Objekt, das die gewünschte Zeitzone darstellt.
Wenn
timezonenicht angegeben wird odernullist unddatetimekeine Zeitzone enthält, wird die aktuelle Zeitzone verwendet.Hinweis:
Wenn der Parameter
datetimeentweder einen UNIX-Zeitstempel enthält (z.B.946684800) oder eine Zeitzone vorgibt (z.B.2010-01-28T15:00:00+02:00), werden der Parametertimezoneund die aktuelle Zeitzone ignoriert.
Rückgabewerte
Gibt eine neue DateTimeImmutable-Instanz zurück. Bei einem Fehler wird false zurückgegeben.
Changelog
| Version | Beschreibung |
|---|---|
| 8.2.0 |
Die format-Zeichen X und
x wurden hinzugefügt.
|
| 7.3.0 |
Das format-Zeichen v wurde
hinzugefügt.
|
Beispiele
Beispiel #1 DateTimeImmutable::createFromFormat()-Beispiel
Objektorientierter Stil
<?php
$date = DateTimeImmutable::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');
?>
Beispiel #2 Besonderheiten von DateTimeImmutable::createFromFormat()
<?php
echo 'Aktuelle Zeit: ' . date('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d';
$date = DateTimeImmutable::createFromFormat($format, '2009-02-15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d H:i:s';
$date = DateTimeImmutable::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-!d H:i:s';
$date = DateTimeImmutable::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = '!d';
$date = DateTimeImmutable::createFromFormat($format, '15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'i';
$date = DateTimeImmutable::createFromFormat($format, '15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Aktuelle Zeit: 2022-06-02 15:50:46 Format: Y-m-d; 2009-02-15 15:50:46 Format: Y-m-d H:i:s; 2009-02-15 15:16:17 Format: Y-m-!d H:i:s; 1970-01-15 15:16:17 Format: !d; 1970-01-15 00:00:00 Format: i; 2022-06-02 00:15:00
Beispiel #3 Formatzeichenkette mit literalen Zeichen
<?php
echo DateTimeImmutable::createFromFormat('H\h i\m s\s','23h 15m 03s')->format('H:i:s');
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
23:15:03
Beispiel #4 Verhalten bei einem Überlauf
<?php
echo DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2021-17-35 16:60:97')->format(DateTimeImmutable::RFC2822);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Sat, 04 Jun 2022 17:01:37 +0000
Das Ergebnis sieht zwar merkwürdig aus, ist aber korrekt, da die folgenden Überläufe erfolgen:
-
97Sekunden überschreiten1Minute, sodass37Sekunden übrig bleiben. -
61Minuten überschreiten1Stunde, sodass1Minute übrig bleibt. -
35Tage überschreiten1Monat, sodass4Tage übrig bleiben. Da nicht jeder Monat die gleiche Anzahl von Tagen hat, hängt die Anzahl der Tage, die übrig bleiben, vom Monat ab. -
18Monate überschreiten1Jahr, sodass6Monate übrig bleiben.
Beispiel #5 Verhalten bei überlaufenden Tagesnamen
<?php
$d = DateTime::createFromFormat(DateTimeInterface::RFC1123, 'Mon, 3 Aug 2020 25:00:00 +0000');
echo $d->format(DateTime::RFC1123), "\n";
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Mon, 10 Aug 2020 01:00:00 +0000
Das Ergebnis sieht zwar merkwürdig aus, ist aber korrekt, da die folgenden Überläufe erfolgen:
-
3 Aug 2020 25:00:00geht über in(Tue) 4 Aug 2020 01:00. -
Monwird eingesetzt, was das Datum aufMon, 10 Aug 2020 01:00:00vorverlegt. Relative Schlüsselwörter wieMonwerden im Abschnitt über relative Formate erläutert.
Um Überläufe in Daten zu erkennen, kann die Methode DateTimeImmutable::getLastErrors() verwendet werden, die eine Warnung enthält, wenn ein Überlauf aufgetreten ist.
Beispiel #6 Erkennen von übergelaufenen Daten
<?php
$d = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2021-17-35 16:60:97');
echo $d->format(DateTimeImmutable::RFC2822), "\n\n";
var_dump(DateTimeImmutable::GetLastErrors());
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Sat, 04 Jun 2022 17:01:37 +0000
array(4) {
'warning_count' =>
int(2)
'warnings' =>
array(1) {
[19] =>
string(27) "The parsed date was invalid"
}
'error_count' =>
int(0)
'errors' =>
array(0) {
}
}
Siehe auch
- DateTimeImmutable::__construct() - Liefert ein neues DateTimeImmutable-Objekt
- DateTimeImmutable::getLastErrors() - Liefert die Warnungen und Fehler
- checkdate() - Prüft ein Gregorianisches Datum auf Gültigkeit
- strptime() - Wertet eine Zeit-/Datumsangabe aus, die mit strftime erzeugt wurde

