Crystal Reports – ISO-Wochennummern

(Kalender-)Wochennummern nach ISO-8601 aus Date-Feldern zu ermitteln ist in Crystal Reports (mindestens bei Versionen 2008 und XI) in Funktion DatePart() fehlerhaft implementiert.

Die folgenden Script-Fragmente können zur Abhilfe im Formelworkshop unter benutzerdefinierten Funktionen hinzugefügt werden


Ermittlung der ISO-Wochennummer:

Function (optional DateVar d := CurrentDate)
NumberVar week := DatePart("ww", d, crMonday, crFirstFourDays);
// Letzte Tage eines Jahres können zur ersten KW des Folgejahres gehören:
if week = 53 and DatePart("ww", cDate(year(d) + 1, 1, 1), crMonday, crFirstFourDays) = 1 then week := 1

// CR errechnet fehlerhafte Werte für Januartage, die zur letzten Vorjahres-KW gehören:
else if week > 53 then
 week := DatePart("ww", cDate(year(d) - 1, 12, 31), crMonday, crFirstFourDays);
// Variable week als Funktionsergebnis zurückgeben
week;

Ermittlung des Jahres, zu dem die ISO Wochennummer gehört (etwa für einen Januartag, der zur 53. KW des Vorjahres zählt):

Function (optional DateVar d := CurrentDate)
NumberVar week := %Funktionsname_der_obigen_Nutzerfunktion%(d);
if week = 1 and month(d) = 12 then
 year(d) + 1
else if week > 10 and month(d) = 1 then
 year(d) - 1
else
 year(d);

Quelle: Aus einer Antwort auf der Q&A-Plattform StackOverflow unter Lizenz cc by-sa 3.0 von Nutzer lapplandscohan