Norbert: Letzten Monatstag ermitteln

Beitrag lesen

Moinsen!

Ich ermittle so den letzten Tag eines Monats (eine Korrektur für den Dezember habe ich der Übersicht halber weggelassen):

use Time::Local;
  $jahr=2013;
  $monat=3; #Januar=1, Februar=2, ...
  $tagessekunden=24*60*60;
  ($sek,$min,$std,$monatstag,$tempmonat,$tempjahr,$wochentag,$jahrestag,$sommerzeit)=localtime(timelocal(0,0,0,1,$monat,$jahr)-$tagessekunden);
  print $monatstag;

Also

  • Den 1. Tag des Folgemonats, 00:00:00 Uhr an timelocal übergeben (Januar entspricht 0, für den Folgemonat muss also 1 übergeben werden)
  • Vom ermittelten Timestamp 1 Tag (24*60*60 Sekunden) abziehen
  • Ergebnis in Datum/Uhrzeit umwandeln, daraus den Monatstag verwenden

Das Ganze scheint wunderbar zu funktionieren - nur für März 2013 nicht. Der hat angeblich nur 30 Tage.

Wo liegt mein Fehler?

Viele Grüße,
Norbert