Frage Das Verhalten der DateTime-Klasse in PHP konnte nicht verstanden werden


Ich benutze LAMP in Kubuntu 14.04 mit PHP 5.6.23.

Beim Benutzen Terminzeit in folgenden Fällen:

1.

print_r((new DateTime('2016-02-31'))->format('M/d/Y')); 
// Mar/02/2016 (no errors, why?)

2.

print_r((new DateTime('2016-02-32'))->format('M/d/Y')); 
// Error - DateTime::__construct(): Failed to parse time string-
// (2016-02-32) at position 9 (2): Unexpected character

Warum gibt der erste Fall keinen Fehler, da es kein 31. Februarmonat gibt?

Referenzen, die die Antwort unterstützen, werden angefordert


5
2017-12-09 12:50


Ursprung


Antworten:


Von dem PHP-Dokumente:

Es ist möglich, das DD- und DD-Format zu über- und unterlaufen. Tag 0   bedeutet den letzten Tag des vorherigen Monats, während Überläufe in die zählen   nächsten Monat. Dies macht "2008-08-00" äquivalent zu "2008-07-31" und   "2008-06-31" entspricht "2008-07-01" (Juni hat nur 30 Tage).

Beachten Sie, dass ab PHP 5.1.0 der Tagesbereich auf 0-31 beschränkt ist   angezeigt durch den regulären Ausdruck oben. Also "2008-06-32" ist kein a   gültige Datumszeichenfolge zum Beispiel.

Das macht es ziemlich klar.

In den Benutzerhinweisen Mirek schlagen auch vor benutzen  mktime


7
2017-12-09 12:58