[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