Die PHP-DateTime::modify-Anomalie mit Monaten verstehen
Die PHP-DateTime::modify-Funktion, wenn sie zum Addieren oder Subtrahieren von Monaten verwendet wird, kann zu unerwarteten Ergebnissen führen. Der Grund dafür liegt im inhärenten Verhalten der Datumsmanipulationsmechanismen von PHP.
Warum es kein Fehler ist
Intern erhöht oder verringert PHP beim Addieren oder Subtrahieren von Monaten die Monatsnummer (z. B. 1 Monat würde die Monatsnummer um eins erhöhen). Es wird jedoch nicht die tatsächliche Anzahl der Tage im resultierenden Monat überprüft. Wenn der resultierende Monat folglich weniger Tage als das ursprüngliche Datum hat, korrigiert PHP das Datum automatisch, indem es die verbleibenden Tage ab dem ersten des folgenden Monats zählt.
Betrachten Sie das Beispiel in der Frage:
$date = new DateTime('2000-12-31'); $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n"; // Output: 2001-01-31 $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n"; // Output: 2001-03-03
In diesem Beispiel ergibt die Addition von 1 Monat zunächst das Datum 31.02.2001. Da der Februar 2001 jedoch nur 28 Tage hat, korrigiert PHP das Datum automatisch auf den 3. März, der 31 Tage hat.
Lösungen für gewünschtes Verhalten
Um das zu erhalten erwartetes Verhalten, bei dem das Datum um einen Monat auf den ersten des Folgemonats vorverlegt wird, können Sie Folgendes verwenden Strategien:
Das obige ist der detaillierte Inhalt vonWarum erzeugt PHP DateTime::modify unerwartete Ergebnisse beim Addieren oder Subtrahieren von Monaten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!