Einführung
Bei der Arbeit mit der DateTime-Klasse von PHP a Beim Addieren von Monaten kommt es zu scheinbar rätselhaftem Verhalten. Entwickler erwarten möglicherweise eine einfache Erhöhung um eins, die Ergebnisse weichen jedoch häufig von dieser Erwartung ab. Dieser Artikel untersucht die Logik hinter diesem Verhalten und erkundet Lösungen, um es zu beheben.
Das unbeabsichtigte Verhalten: Eine Begründung
Gemäß der PHP-Dokumentation werden Monate addiert oder subtrahiert DateTime führt nicht unbedingt zu einer entsprechenden Änderung des Datums. Betrachten Sie das folgende Beispiel:
$date = new DateTime('2000-12-31'); $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n"; // Outputs "2001-01-31"
Anstatt auf den 31. Januar vorzurücken, springt das Datum auf den 3. März. Das liegt daran, dass der Februar nur 28 Tage hat (bzw. 29 in Schaltjahren), daher passt PHP die Tagesanzahl an, damit sie in den nächsten Monat passt.
Lösungen für das erwartete Verhalten
Um das erwartete Verhalten zu erreichen, bei dem das Hinzufügen eines Monats das Datum auf den entsprechenden Tag im nächsten Monat verschiebt, ist eine manuelle Überprüfung und Korrektur erforderlich. Die Anzahl der Tage im nächsten Monat muss ermittelt und zum aktuellen Datum addiert werden.
PHP 5.3-Ansatz (Relative Time Stanza)
Für PHP 5.3 und höher: Die relative Zeitstrophe bietet eine elegantere Lösung:
$date = new DateTime('2010-01-31'); $date->modify('first day of next month'); echo $date->format('F') . "\n"; // Outputs "February"
Diese Strophe kombiniert den nächsten Monat und den ersten Tag von, um das Datum vorzuverlegen am ersten Tag des Folgemonats, um das erwartete Verhalten sicherzustellen.
Das obige ist der detaillierte Inhalt vonWarum führt „DateTime::modify' von PHP beim Hinzufügen von Monaten zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!