(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