Ich muss ein Datum bekommen, das 6 Monate mit einem bestimmten Datum hinzugefügt wird. Ich habe den folgenden Code verwendet
%Vor% welches Ergebnis als 2017-03-02 ergab
Dann änderte ich das Startdatum im Code wie folgt
was das Ergebnis als 2017-03-01 ergibt
Warum passiert das auf Anhieb? Ist mit meinem Code etwas nicht in Ordnung?
Mysql-Abfrage verwenden
gibt Ergebnis 2017-02-28
Welches ist die richtige Lösung, um das richtige Datum zu bekommen?
Dies geschieht aufgrund des Verhaltens von PHP. In diesem Fall werden 6 Monate hinzugefügt, die Februar geben (es hat 28 Tage), also fügt es drei weitere Tage hinzu, aber in MySQL fügt es nur Monate hinzu.
Um dies zu lösen, verwenden Sie last day of 6 month
oder last day of sixth month
anstelle von +6 months
Code
%Vor%Ausgabe
%Vor%Eine andere Lösung
%Vor%Ausgabe
%Vor%Siehe auch Relative Formate
Diese Funktion funktioniert NICHT von links nach rechts, wie man denken würde. Diese Funktion analysiert die Zeichenfolge als Ganzes und wendet dann die Intervalle nach Größe an (Jahr, Monat, ...). Nehmen Sie das folgende Beispiel:
%Vor%Scheint wie PHP-Datum "Korrektur" unterscheidet sich von MySQL:
2017-02-30
, indem ungültige Tage (29. und 30. Februar 2017) in den nächsten Monat verschoben werden 2017-02-30
, indem ungültige Tage bis zum letzten Tag des Monats geklammert werden Hier ist eine Lösung, die helfen könnte. Es verwendet die DateTime-Klasse, aber die Konvertierung in date / strtotime ist trivial.
%Vor%