[Allegro] Kalender: Wochennummer stimmt nicht immer
Sibylle Koczian
Sibylle.Koczian at T-Online.de
Sa Mai 10 20:41:00 CEST 2008
Liebe Liste,
in der aktuellen Version berechnet kalender.flx zu hohe
Kalenderwochen-Nummern für Monate, die mit einem Sonntag beginnen (wie
jetzt der Juni: die Zählung beginnt mit Woche 23 statt 22). Ich habe
jetzt mal einen korrigierten Flex geschrieben, der nichts anderes tut
als die Wochennummer zu berechnen und zusammen mit dem Wochentag für
jeden gewünschten Monatsersten auszugeben. So kann man das Ganze erst
mal für sich allein testen. Für das laufende Jahr habe ich es
durchgespielt, da stimmt alles. Dieses Jahr kommt auch jeder Wochentag
mal als Monatsanfang vor (ich habe jetzt nicht nachgeprüft, ob das
eigentlich in jedem Jahr so ist oder vielleicht nur in Schaltjahren).
Im Wesentlichen habe ich einen Tippfehler verbessert (?) und die
zusätzliche Addition weggenommen, die für den Fall "Monatserster fällt
auf Montag" eingesetzt war. Die ist zu viel des Guten. Es ist ja sowieso
besser, den Wert für #uMt gleich richtig zu setzen, statt hinterher noch
mal daran herumzukorrigieren.
Beste Grüße,
Koczian
*** wo-nr.flx
Aufruf: X wo-nr JJJJMM oder exec wo-nr JJJJMM
oder: X wo-nr JJJJ oder exec wo-nr JJJJ (dann MM=01)
oder: X wo-nr aktueller Monat
Aufrufwert -> #uU1, wenn keiner gegeben, dann #dts = aktuelles Datum
if "" var #dts(0,6)
var (0,6)
ins #uU1
var #uU1 "xx"
var (0,6)
war der Wert 4stellig? Dann 01 anhaengen
if %xx% var #uU1(0,4) "01"
ins #uU1 // Form ist jetzt JJJJMM
Wochennummer-Berechnung
Wenn die erste Woche des Jahres weniger als 4 Tage hat, muss man von
der
Wochennummer 1 abziehen. D.h. Wenn 1.1. = Fr, Sa, So - dann Woche 0
Welcher Wochentag ist der 1.1.?
var #uU1(0,4) "0101"
z=0
Day
var (b" = ")
Wenn Fr/Sa/So, dann #uMt/7 = 1, sonst 0 (Wochennummer-Korrektur)
if "Mo" z=7
if "Di" z=8
if "Mi" z=9
if "Do" z=10
if "Fr" z=4
if "Sa" z=5
if "So" z=6 // Im Original steht hier noch mal z=5, wohl
Tippfehler?
var z
ins #uMt
Aktueller Tag - 1.1.
var #uU1 "01-" #uU1(0,4) "0101"
Day
Nummer des Monatsersten im angegebenen Monat (Achtung, Neujahr = 0!)
z=
var #uMt // addieren, um korrekte Division zu erreichen
z+
und noch 1 drauf, sonst Fehler wenn Monat mit Montag beginnt. -
Nein!
z+1
*** testweise erst mal speichern und z mod 7 berechnen (Wochentag)
var z
insert $tagnr
z%7
var z
insert $wtag
var $tagnr
z=
*** Ende Test
und durch 7 teilen
z/7
var z
ergibt
ins #uMf // Nummer der Woche
*** Ergebnis ausgeben (nur zur Kontrolle)
var "Der 1." #uU1(4,2) "." #uU1(0,4) " liegt in KW " #uMf n
var +"Wochentag (Mo = 0, So = 6): " $wtag
message
--
Dr. Sibylle Koczian
Mehr Informationen über die Mailingliste Allegro