Kalenderwoche berechnen - fertig nutzbare Formel und Ideen im domino.ideas.aha.io

von Thomas Bahn,
assono GmbH, Standort Kiel,

Ich hätte nicht erwartet, dass es so kompliziert ist, aber entweder habe ich die richtige Stelle übersehen oder es gibt es wirklich nicht: Eine @Formel zur Berechnung der aktuellen Kalenderwoche, die für Deutschland die richtigen Ergebnisse berechnet.

Für einen Kunden sollte ich eine Ansicht bauen, indem die Dokumente nach Jahr und Kalenderwoche kategorisiert dargestellt (und summiert) werden. Darauf hin habe ich mich erst in die Designer-Hilfe vergraben und habe nichts gefunden aus Format(date, "ww").

Als nächstes habe ich erst einmal geschaut, wie die Kalenderwoche hier in Deutschland definiert ist und berechnet wird: Woche in Wikipedia. Das ist komplizierter, als ich zunächst dachte. Erste wichtige Erkenntnis: Die Bestimmung der Kalenderwoche ist von Region zu Region verschieden, insbesondere zwischen USA und Deutschland.

Ein kleiner Test mit dem 3.1.1999 (ein extremes Beispiel):

  • in den USA gehört dieser Sonntag zur 2. Kalenderwoche 1999
  • in Deutschland gehört er zur 53. Kalenderwoche 1998

Also gleich mal zwei Wochen weiter...

Nächste Erkenntnis: Obwohl der Tag in 1999 liegt, ist es die 53. Kalenderwoche von 1998!

Also wird mir die Berechnung der Kalenderwoche alleine auch noch nicht weiterhelfen, sondern ich brauche auch das Jahr zur Kalenderwoche, das im Einzelfall vom Jahr des Datums abweichen kann.

Dann frage ich die Suchmaschine meines Mistrauens und finde eine gute Vorlage unter https://searchdomino.techtarge... von Marc Gaillard aus dem April 2002. Auch wenn der Autor es verschweigt: Er setzt die Definition nach ISO 8601 in @Formelsprache um, also die Definition, die für uns Deutschland gilt.

Speziell bei solchen komplexen Formeln bin ich ein Fan sprechender Variablennamen - und wir kennzeichnen @Formelsprache-Variablen bei uns einheitlich mit einem führenden Unterstrich, um sie einfach von Items in Dokumenten unterscheiden zu können. Und zur besseren Nachvollziehbarkeit habe ich auch noch zwei zusätzliche Zwischenvariablen eingefügt. Mein Ergebnis:

_datum := @Date(Erstellungszeitpunkt);

_donnerstagDerGleichenWoche := @Adjust(_datum; 0; 0; @Modulo(8 - @Weekday(_datum); 7) - 3; 0; 0; 0);
_1ster1sterImJahrDesDonnerstags := @Date(@Year(_donnerstagDerGleichenWoche); 1; 1);
_1sterDonnerstagInGleichemJahrVorlaeufig := @Adjust(_1ster1sterImJahrDesDonnerstags; 0; 0; @Modulo(8 - @Weekday(_1ster1sterImJahrDesDonnerstags); 7) - 3; 0; 0; 0);
_1sterDonnerstagInGleichemJahrKorrigiert := @If(
	@Month(_1sterDonnerstagInGleichemJahrVorlaeufig) = 12;
	@Adjust(_1sterDonnerstagInGleichemJahrVorlaeufig; 0; 0; 7; 0; 0; 0);
	_1sterDonnerstagInGleichemJahrVorlaeufig
);
_tageZwischenDoDerGleichenWocheUnd1sterDo := (_donnerstagDerGleichenWoche - _1sterDonnerstagInGleichemJahrKorrigiert) / (24 * 3600);
_kalenderwoche := ((_tageZwischenDoDerGleichenWocheUnd1sterDo / 7) + 1);
@Text(@Year(_1ster1sterImJahrDesDonnerstags)) + "\\KW " + @Right("00" + @Text(_kalenderwoche); 2)

Ich finde aber, dass diese Art von Berechnung direkt in die Sprache gehört. Daher habe ich zwei Ideen auf domino.ideas.aha.io erstellt: Add a @Calendarweek formula function, which obeys the user's regional settings und Add a Calendarweek LotusScript function, which obeys the user's regional settings.

Ich freue mich über jede Stimme!

Am Rande bemerkt: Mit Format(Datum, "ww") gibt es theoretisch eine Kalenderwochen-Berechnung in LotusScript. Leider gibt diese Funktion aber immer die amerikanische Kalenderwoche zurück - und das Problem mit dem zugehörigen Jahr ist damit auch nicht gelöst.

Das könnte Sie auch interessieren:

Entwicklung IBM Notes und Domino

Quellen:

Fachbeitrag IBM Notes IBM Domino Entwicklung

Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de

Sie wollen eine individuelle Lösung? Kontaktieren Sie uns

Weitere interessante Artikel

Sie haben Fragen oder möchten eine Demo anfordern?

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Gerne erstellen wir eine individuelle Demo für Sie.

Wir verwenden Ihre Daten, um Sie einmalig per E-Mail zu kontaktieren. Wir geben Ihre Daten nicht an Dritte weiter. Siehe: Datenschutzhinweise
assono GmbH

Standort Kiel (Zentrale)
assono GmbH
Lise-Meitner-Straße 1–7
24223 Schwentinental

Standort Hamburg
assono GmbH
Bornkampsweg 58
22761 Hamburg

Telefonnummern:
Zentrale: +49 4307 900 407
Techn. Hotline: +49 4307 900 403
Vertrieb: +49 4307 900 402

E-Mail-Adressen:
kontakt@assono.de
bewerbung@assono.de