Autor Thema: Kalenderwoche mit Format berechnen  (Gelesen 8003 mal)

Glombi

  • Gast
Kalenderwoche mit Format berechnen
« 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  :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   >:(
« Letzte Änderung: 12.02.04 - 11:56:06 von Glombi »

Offline fritandr

  • Global Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 742
  • Geschlecht: Männlich
  • Höre nie auf besser zu werden...
    • KAMMACHI Consulting GmbH
Re:Kalenderwoche mit Format berechnen
« Antwort #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
Andreas Fritz

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Kalenderwoche mit Format berechnen
« Antwort #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
Matthias

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


Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Kalenderwoche mit Format berechnen
« Antwort #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  ;)

HTH,
Bernhard
« Letzte Änderung: 15.02.05 - 19:57:25 von koehlerbv »

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Kalenderwoche mit Format berechnen
« Antwort #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
Matthias

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


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz