Wie berechnet man den Ultimo (Monatsende) eines bestimmten Monats in einem bestimmten Jahr in (fast) allen Programmiersprachen?


12.03.2022, 00:32

Statt Ultimo = 8.3.2022 - 8 = 28.2.2022


12.03.2022, 00:33

und nicht 28.3.2022

2 Antworten

Die meisten Programmiersprachen haben eine entsprechende API im Repertoire, mit der man Datumsberechnungen durchführen kann. Du brauchst an sich nur einen Tag vom ersten Tag des Folgemonats subtrahieren.

Beispiel in JavaScript:

const lastDayOfJanuary = new Date(2021, 1, 0);

Die Monatszählung beginnt hier bei 0. Da für den Tag eine 0 angegeben wird (statt der 1 für den ersten Tag), rechnet JavaScript automatisch herunter.

Aber ja, es macht auch Sinn, im Vorfeld noch tiefer in die Dokumentation zu blicken. Sei es C#, Java, PHP, Python, ... sehr häufig gibt es bereits eine Funktion, die selbst diese obige Rechnung überflüssig macht.

Wenn man unbedingt eine eigene mathematische Lösung finden möchte, würde ich zunächst den Monat (numerisch) prüfen. Auf der Grundlage, dass die Monatsangabe bei 0 beginnt, hättest du bei den Monaten 0, 2, 4, 6, 7, 9 und 11 jeweils 31 Tage. Bei den Monaten 3, 5, 8 und 10 wiederum 30. Somit bleibt nur noch der Februar, für den man (mit Hilfe der Jahresangabe) schauen müsste, ob es sich um ein Schaltjahr handelt oder nicht. Die Kriterien dafür werden auf dieser Seite zusammengefasst. Die Berechnung könnte also folgendermaßen aussehen:

int days = 28;

if ((year % 4 == 0 && year % 100 == 0 && year % 400 == 0)
  || (year % 4 == 0 && year % 100 != 0)) {

  days = 29;
}

Mit der von dir beschriebenen Funktion hast du immer eine Abfrage, ob du vom Monat 12 den Ultimo wissen willst und dann im Folgejahr den 1.1. setzen. Dann kannst du erst den 1 Tage abziehen...