Heim > Backend-Entwicklung > PHP-Tutorial > Warum erzeugt PHP DateTime::modify unerwartete Ergebnisse beim Addieren oder Subtrahieren von Monaten?

Warum erzeugt PHP DateTime::modify unerwartete Ergebnisse beim Addieren oder Subtrahieren von Monaten?

Barbara Streisand
Freigeben: 2024-12-05 08:22:13
Original
485 Leute haben es durchsucht

Why Does PHP DateTime::modify Produce Unexpected Results When Adding or Subtracting Months?

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
Nach dem Login kopieren

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:

  • Manuell den nächsten Monat überprüfen: Durchlaufen Sie die Tage im resultierenden Monat und stellen Sie fest, ob das gewünschte Datum vorhanden ist. Wenn nicht, springen Sie zum Ersten des folgenden Monats.
  • Strophe zur relativen Zeit von PHP 5.3: Nutzen Sie den ersten Tag der in PHP 5.3 eingeführten Syntax, um explizit anzugeben, dass die Änderung voranschreiten soll das Datum auf den ersten Tag des nächsten Monats (z. B. $date->modify('first day of next Monat')).

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage