AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
09.07.20 - 17:10:31
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino Sonstiges
| |-+  Tipps und Tricks (Moderatoren: eknori, fritandr, ata)
| | |-+  Kalenderwoche mit Format berechnen
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Kalenderwoche mit Format berechnen  (Gelesen 6310 mal)
Glombi
Gast
« am: 12.02.04 - 11:55:07 »

Bin mal wieder bei einem meiner Lieblingsthemen: Es gibt eine Script-Funktion, mit der man die Kalenderwoche berechnen kann  Shocked
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   Angry
« Letzte Änderung: 12.02.04 - 11:56:06 von Glombi » Gespeichert
fritandr
Global Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 732


Höre nie auf besser zu werden...


WWW
« Antworten #1 am: 12.02.04 - 13:35:12 »


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.

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
Gespeichert

Andreas Fritz
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #2 am: 12.02.04 - 21:11:03 »

Hier der Vollständigkeit halber noch der Code mit dem es nach ISO 8601:1988 klappt:

Keysolutions


Matthias
Gespeichert

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.

koehlerbv
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #3 am: 06.12.04 - 00:35:23 »

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  ) ) )

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  Wink

HTH,
Bernhard
« Letzte Änderung: 15.02.05 - 19:57:25 von koehlerbv » Gespeichert
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #4 am: 06.12.04 - 20:05:54 »

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
Gespeichert

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.

Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: