Heim > Backend-Entwicklung > PHP-Tutorial > Umgang mit PHP strtotime BUG

Umgang mit PHP strtotime BUG

coldplay.xixi
Freigeben: 2023-04-08 19:04:01
nach vorne
3852 Leute haben es durchsucht

Umgang mit PHP strtotime BUG

BUG-Behandlung von PHP strtotime

In letzter Zeit wird strtotime in Kombination mit -1 Monat, +1 Monat, nächster Monat verwendet, um die zu erhalten vorheriger Monat oder nächster Monat Monatsdatum, aber ich habe gerade einen Artikel gesehen und festgestellt, dass die Verwendung von strtotime zum direkten Abrufen des Datums immer noch ein kleiner Fehler ist

FEHLER

Zum Beispiel , Datum:

$today = '2020-12-31';
echo date("Y-m-d",strtotime("$today -1 month"))
Nach dem Login kopieren

Ausgabe

2020-12-01
Nach dem Login kopieren

Wie aus der obigen Ausgabe ersichtlich ist, ist die Ausgabe immer noch Dezember 2020

Analyse:

Machen Sie es zuerst - 1 Monat, dann ist es aktuell der 31.07., und nach dem Subtrahieren von eins ist es der 31.06.

Machen Sie die Datumsnormalisierung erneut durch, da es im Juni keinen 31. gibt ist wie 2:60 gleich 3:00, 31. Juni gleich 1. Juli

Ist die Logik sehr „klar“? Wir können den zweiten Schritt auch manuell überprüfen, wie zum Beispiel:

var_dump(date("Y-m-d", strtotime("2020-12-31")));
// 输出2020-12-01
Nach dem Login kopieren

Mit anderen Worten, solange es um die großen und kleinen Monate geht. Am letzten Tag des Monats kann es zu dieser Verwirrung kommen. Wir können auch ähnliche andere Monate leicht überprüfen, um diese Schlussfolgerung zu bestätigen:

var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2020-12-31"))));
// 输出2020-12-03
 
var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2020-08-31"))));
// 输出2020-10-01
 
var_dump(date("Y-m-d", strtotime("next month", strtotime("2020-01-31"))));
// 输出2020-03-03
 
var_dump(date("Y-m-d", strtotime("last month", strtotime("2020-03-31"))));
// 输出2020-03-03
Nach dem Login kopieren

Lösung

Ab PHP5 Ab .3 hat date eine Reihe von Korrekturphrasen hinzugefügt, um dieses Problem zu klären, nämlich „erster Tag von“ und „letzter Tag von“, was bedeutet, dass Sie es können Begrenzen Sie das Datum, damit das Datum nicht automatisch „normalisiert“ wird:

var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2020-03-31"))));
//输出2020-02-28
 
var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2020-08-31"))));
//输出2020-09-01
 
var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2020-01-31"))));
//输出2020-02-01
 
var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2020-03-31"))));
//输出2020-02-28
Nach dem Login kopieren

Wenn es sich um eine Version vor 5.3 handelt, können Sie mktime oder ähnliches verwenden, um alle Tage einfach zu ignorieren Sie auf den 1. eines jeden Monats, aber es ist besser, den ersten Tag direkt zu verwenden.

Empfohlenes Tutorial: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonUmgang mit PHP strtotime BUG. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:liqingbo.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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage