Unterstützte Datums- und Zeitformate
Inhaltsverzeichnis
Dieser Abschnitt beschreibt alle verschiedenen Formate, die der Parser von
DateTimeImmutable, DateTime,
date_create_immutable(),
date_create(), date_parse() und
strtotime() versteht. Die Formate sind in Abschnitte
gegliedert. In den meisten Fällen können Formate aus verschiedenen
Abschnitten durch Leerzeichen, Komma oder Punkt getrennt in derselben
Zeichenkette für Datum und Uhrzeit verwendet werden. Für jedes der
unterstützten Formate werden ein oder mehrere Beispiele sowie eine
Beschreibung des Formats angegeben. Bei Formatzeichen in einfachen
Anführungszeichen wird nicht zwischen Groß- und Kleinschreibung
unterschieden ('t'
könnte t
oder
T
sein), bei Zeichen in doppelten Anführungszeichen wird
zwischen Groß- und Kleinschreibung unterschieden ("T"
ist
nur T
).
Es sollten ein paar allgemeine Regeln beachtet werden.
- Der Parser erlaubt für jede Einheit (Jahr, Monat, Tag, Stunde, Minute, Sekunde) die gesamte Bandbreite an Werten. Für ein Jahr sind das einfach 4 Ziffern, für einen Monat ist es 0-12, für einen Tag 0-31, für Stunden 0-24 und für Minuten 0-59.
- Weil es Datumsangaben gibt, die eine Schaltsekunde enthalten, ist bei Sekunden die 60 erlaubt. PHP implementiert jedoch die Unix-Zeit, bei der "60" keine gültige Sekundenzahl ist, sodass es zu einem Überlauf kommt.
-
Wenn eine Zahl außerhalb des zulässigen Bereichs liegt, gibt
strtotime()
false
zurück, und DateTimeImmutable::__construct() löst eine Ausnahme aus. - Wenn eine Zeichenkette ein Datum enthält, werden alle Zeitelemente auf 0 zurückgesetzt.
- Wenn irgendein Teil einer Zeit in der angegebenen Zeichenkette vorhanden ist, werden alle kleineren Zeitelemente auf 0 zurückgesetzt.
- Um den Parser schneller (und universeller) zu machen, führt er keinerlei Prüfungen durch.
-
Es gibt eine Möglichkeit, zu prüfen, ob ein ungültiges Datum oder eine ungültige Uhrzeit angegeben wurde:
<?php
$res = date_parse("2015-09-31");
var_dump($res["warnings"]);
?>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(1) { [11] => string(27) "The parsed date was invalid" }
-
Es ist bereits möglich, die Grenzfälle zu berücksichtigen, aber dafür muss DateTimeImmutable::createFromFormat() mit dem korrekten Format verwendet werden.
<?php
$res = DateImmutable::createFromFormat("Y-m-d", "2015-09-34");
var_dump($res);Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
class DateTime#1 (3) { public $date => string(26) "2015-10-04 17:24:43.000000" public $timezone_type => int(3) public $timezone => string(13) "Europe/London" }