Lotus Notes / Domino Sonstiges > Tipps und Tricks
Kalenderwoche mit Format berechnen
(1/1)
Glombi:
Bin mal wieder bei einem meiner Lieblingsthemen: Es gibt eine Script-Funktion, mit der man die Kalenderwoche berechnen kann :o
Tatsächlich, seit der Version 4 gibt es die und bis jetzt hat es wohl fast keiner gewusst.
Format$( <Datum>, "ww")
liefert die Kalenderwoche zurück - so die Dokumentation.
Leider arbeitet die Funktion nicht korrekt - es wird jedenfalls nicht der ISO-Standard
>>>
- a week starts with a mondag, monday is day number 1
- week 1 is the first week of the year that has 4 or more days in January (and the rest of course in December)
which is the same as
- the first week of the year is the week containing the first Thursday
<<<
berücksichtigt.
Beispiel:
01.01.2004: Es wird KW 1 geliefert - richtig
04.01.2004: Es wird KW 2 geliefert - falsch (korrekt wäre 1)
31.12.2003: Es wird KW 53 geliefert - falsch (korrekt wäre 1)
31.12.2004: Es wird KW 53 geliefert - richtig
01.01.2005: Es wird KW 1 geliefert - falsch (korrekt wäre 53)
07.01.2005: Es wird KW 2 geliefert - falsch (korrekt wäre 1)
=> alle KW in 2005 sind um 1 nach vorne verschoben
Hier mal ein kleines Script zum Testen:
Dim ws As NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim ret As Variant
Set ws = New NotesUIWorkspace
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
ret = Format$( doc.Datum(0), "ww")
doc.KW = ret
Ergo: Nicht zu gebrauchen oder aufwendig anzupassen >:(
fritandr:
--- Zitat von: Glombi am 12.02.04 - 11:55:07 ---
Leider arbeitet die Funktion nicht korrekt - es wird jedenfalls nicht der ISO-Standard
>>>
- a week starts with a mondag, monday is day number 1
- week 1 is the first week of the year that has 4 or more days in January (and the rest of course in December)
which is the same as
- the first week of the year is the week containing the first Thursday
<<<
berücksichtigt.
--- Ende Zitat ---
Hallo Andreas,
das stimmt leider. In diese Falle bin ich auch schon getappt. Da haben die Entwickler in Ami-Land wohl mal wieder nur an sich gedacht.
Gruß
Andreas
TMC:
Hier der Vollständigkeit halber noch der Code mit dem es nach ISO 8601:1988 klappt:
Keysolutions
Matthias
koehlerbv:
Sorry, dass ich hier einen uralten Thread wieder hervorhole ...
Matthias verwies zuletzt auf einen Keysolutions-Beitrag, der auch eine LS-Routine zur KW-Berechnung enthält. Genau über diese Routine bin ich letztens bei einem Kunden gestossen. Die Firma, die dort vorher programmieren durfte, hat diese Lösung 1:1 (fairerweise sogar mit Angabe des eigentlichen Autors) verwendet.
A-Bär: Diese Künstler wussten, dass ihr Code in einer internationalen Umgebung von Spanien bis Australien zum Einsatz kommen sollte. Und dabei sind sie über einen entscheidenden Fehler im Code von Christian Meis gestolpert:
--- Code: ---December31Offset = CalculateIsoWeekday( Cdat( "31.12." & Cstr( YearInQuestion ) ) )
--- Ende Code ---
Mit dem westeuropäischen Datumsformat ("31.12." kann natürlich nicht jeder internationale Server klarkommen - der Ärger ist quasi vorprogrammiert.
Sollte also jemand den (ansonst stimmigen) Algorithmus verwenden, dann muss unbedingt die Settings für den ersten und den letzten Tag des Jahres ersetzt werden unter Zuhilfenahme der Funktion DATENUMBER (siehe Designerhelp).
Dann ist man derartige Sorgen weltweit los ;)
HTH,
Bernhard
TMC:
Danke für den wichtigen Hinweis, Bernhard !
Vielleicht hast Du noch Lust, das auch dem Autor mitzuteilen (NotesFAQ@keysolutions.com), wenn nicht eh schon gemacht.
Merci,
Matthias
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln