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.