Vorweg habe ich diese Frage gelesen:
So verhindern Sie, dass PHP ein DateTime-Objekt mit dem Wert" prime "in" -0001-11-30 "konvertiert
Aber ich bekomme nicht warum 0000-00-00 00:00:00 ändert sich zu -0001-11-30 00:00:00, wenn ich diesen Code ausführe:
%Vor%Wenn ich es mit 0001-00-00 00:00:00 versuche, bekomme ich:
%Vor%und mit 0001-01-01 00:00:00 bekomme ich:
%Vor%und mit 0000-00-01 00:00:00:
%Vor%Gibt es einen bestimmten Grund, warum es immer ein Jahr / Tag / Monat vor dem nicht existierenden Datum ist?
Stimmt etwas nicht mit den Funktionen date_create oder date_format ?
Ich merke, dass die Uhrzeit richtig angezeigt wird und wahrscheinlich weil die Zeit 00:00:00 existiert.
Es ist wie @Mark Baker sagte, 0000-00-00 00:00:00
ist ein ungültiges Datum, weil es keinen Monat Null gibt, kein Tag Null .... also ist es Monat 1 (Jan) - 1 (Dez des vorherigen Jahres) und Tag 1 - 1 (Geht zum letzten Tag des vorherigen Monats und gibt den 30. November an).
Wenn Sie in date_create näher genug zu diesem Verhalten sehen. Er sagt DateTime
erkennt eine beliebige Anzahl bis zu 12 als [month]
und eine beliebige Anzahl bis zu 31 als [day]
; Es berechnet das resultierende Datum als [day]
Tage nach dem Start von [month]
. Dies bedeutet, dass wenn ein datetime
-Objekt mit mehr Tagen erstellt wird, als in diesem Monat gefunden werden, das Datum über das Ende des Monats hinausgeht. Dies gilt auch, wenn das Erstellungsdatum ein ungültiges Datum ist. :)
Dies ist ein bekanntes Problem mit der DateTime-Funktion in PHP. Die Datetime-Funktion hat keine ordnungsgemäße Fehlerbehandlung.
Andere Funktionen wie strtotime behandelt es richtig.
Sie können lesen dies für mehr Referenz.