Hi Rolf,
Danke für das Codebeispiel.
Aber, hat perl kein switch/case Konstrukt? Das wäre in der first Funktion bestimmt besser als 6 unnötige sprintf Aufrufe.
Wenn man mit fortlaufenden Tagen $jd (Julian Day) rechnen kann, ist es gar nicht notwendig, den Wochentag $wd über einen Switch zu jagen. Da genügt eine einfache Kontrollstruktur was den Wochentag $wd betrifft und der Rest ist Berechnung. Die Tabelle noch einmal, links der numerische Wochentag (1 bis 7) und rechts die Korrektur für den fortlaufenden Tag jd':
|wd|jd' |1|0 |2|-1 |3|-2 |4|-3 |5|3 |6|2 |7|1
In eine Kontrollstruktur gefasst ergibt sich für die Berechnung:
if( 1 <= $wd && $wd <= 4 ){
$jd = $jd - $wd - 1;
}
else{
$jd = $jd + 8 - $wd;
}
Mir ist das heute an einer anderen Stelle wieder untergekommen, daß man beim Rechnen mit dem Datum auf Kontrollstrukturen weitgehend verzichten kann sofern es möglich ist mit fortlaufenden Tagen zu rechnen. Wenn man z.B. wissen will, ob auf KW 52 die KW 53 folgt oder KW 1 des nächsten Jahres, wird einfach ein JD-Tag der KW 52 hergenommen, 7 Tage aufaddiert und daraus die resultierende Woche berechnet.
Schönen Advent-Sonntag 😉