Norbert: Letzten Monatstag ermitteln

Beitrag lesen

Liebe Leute,

ich habe meinen Fehler gefunden: Der 31.3. ist in diesem Jahr der letzte Sonntag im März und deshalb wegen der Umstellung auf die Sommerzeit nur 23 Stunden lang. Diesen Sonderfall hatte ich nicht berücksichtigt.

Wenn sich schon jemand Gedanken gemacht hat: Besten Dank dafür!

Viele Grüße,
Norbert

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