PHP Vormonat berechnen?

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Servus zusammen,

ich versuche gerade mittels einer Funktion bei der Eingabe eines Datums
das Datum des ersten und des letzten Tages des Vormonats zu ermitteln.

So... funktioniert es wunderbar:
PHP:
$datum = new DateTime('2020-05-15');
$datum->modify('-1 month');
$vormonatStart = $datum->format('01.m.Y');
$vormonatEnde = $datum->format('t.m.Y');

echo $vormonatStart . ' ' . $vormonatEnde;

Ergebnis: 01.04.2020 und 31.04.2020.

Wenn ich als Eingabe aber das Datum 31.03.2020 eingebe. Dann läuft´s
schief, da der Februar bspw. nur bis zum 29. ging. Kann ich das Pro-
blem mit wenig Aufwand lösen?

VG
 
Wird das Datum korrekt berechnet wenn du einen Tag abziehen würdest?
Der letzte Tag des Monats ist ja der 1. Tag des nachfolgenden Monats -1 Tag. Das ist ja relativ einfach zu bestimmen.
 
  • Gefällt mir
Reaktionen: up.whatever
Leider nicht. Aber dann hätte ich das Problem auch am 01. eines Monats. Dann würde er in den Vorvormonat springen. Aber leider löst es das Problem auch nicht richtig.
 
Ich glaube du hast ihn falsch verstanden.

Datum 31.03.2020
1. Schritt - Finde den ersten des Monats: 31.03.2020 -> 01.03.2020
2. Schritt - Finde den letzten Tag des Vormonats: Subtrahiere 1 Tag von 01.03.2020 -> 29.02.2020
3. Schritt - Finde den ersten Tag des Vormonats: 29.02.2020 -> 01.02.2020
 
Klappt das so vielleicht?

PHP:
$datum = new DateTime('2020-03-31');
$datum->modify('first day of last month');
$vormonatStart = $datum->format('01.m.Y');
$vormonatEnde = $datum->format('t.m.Y');

echo $vormonatStart . ' ' . $vormonatEnde;

Das klappt. Habe gerade mal geschaut wie PHP das berechnet. Bei "-1 month" rechnet er quasi -30. Deswegen kommst du damit nicht ganz bis zum letzten Monat. Gibst du aber "first day of last month" an, springt er wirklich einen Monat zurück bis auf den 01. des Monats und von da kannst du dann weiter rechnen. Das sollte hier eine Lösung sein :)
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: Nase
new Account() schrieb:
Ich glaube du hast ihn falsch verstanden.

Datum 31.03.2020
1. Schritt - Finde den ersten des Monats: 31.03.2020 -> 01.03.2020
2. Schritt - Finde den letzten Tag des Vormonats: Subtrahiere 1 Tag von 01.03.2020 -> 29.02.2020
3. Schritt - Finde den ersten Tag des Vormonats: 29.02.2020 -> 01.02.2020

Aaah, danke! Dann hab ich es falsch verstanden - so macht´s natürlich Sinn. Danke euch!
 
Die erste Rechnung ist übrigens auch falsch. Einen 31.04. gibt es nicht.
 

Ähnliche Themen

Zurück
Oben