|
Es gibt Jahre, in denen die letzten Tage des Dezembers bereits zur ersten Kalenderwoche des darauffolgenden Jahres zählen (etwa in 2001, 2002 und 2003). Leider gibt es keine VB(A)-Funktion, die Ihnen zu einem Datum wie "31.12.2001" die korrekte Angabe der Jahres-Kalenderwoche etwa in der Form "1/2002" liefern könnte. Immerhin liefert die DatePart-Funktion zum Intervall "w" die richtige Kalenderwoche 1. Jedoch liefert sie zum Intervall "yyyy" das für das Datum selbst zwar korrekte Jahr 2001, was allerdings eben nicht das Jahr der Kalenderwoche ist.
Hier hilft nur eine ausdrückliche Interpretation von Kalenderwoche und Jahr zu einem Datum, um das korrekte Kalenderwochenjahr zu ermitteln: Wenn zu einem Datum im Monat 12 die Kalenderwoche 1 lautet, kann es sich nur um das Folgejahr handeln.
Die Funktion YearOfWeek liefert entsprechend dieser Regel das Kalenderwochenjahr zu einem gegebenen Datum:
Public Function YearOfWeek(ByVal TestDate As Date, _
Optional ByVal FirstDayOfWeek As VbDayOfWeek _
= vbUseSystemDayOfWeek, _
Optional ByVal FirstWeekOfYear As VbFirstWeekOfYear _
= vbUseSystem) As Integer
If Month(TestDate) = 12 Then
If DatePart("ww", TestDate, _
FirstDayOfWeek, FirstWeekOfYear) = 1 Then
YearOfWeek = Year(TestDate) + 1
Exit Function
End If
End If
YearOfWeek = Year(TestDate)
End Function
Sowohl die Kalenderwoche als auch das Kalenderwochenjahr in einem Aufwasch ermittelt die Funktion WeekYear. Sie liefert die Kalenderwoche direkt als Rückgabewert der Funktion. Für das Kalenderwochenjahr können Sie eine separate Variable deklarieren, die Sie optional als zweiten Parameter übergeben können.
Public Function WeekYear(ByVal TestDate As Date, _
Optional YearOfWeek As Variant, _
Optional ByVal FirstDayOfWeek As VbDayOfWeek _
= vbUseSystemDayOfWeek, _
Optional ByVal FirstWeekOfYear As VbFirstWeekOfYear _
= vbUseSystem)
WeekYear = _
DatePart("ww", TestDate, FirstDayOfWeek, FirstWeekOfYear)
If Not IsMissing(YearOfWeek) Then
If Month(TestDate) = 12 Then
If WeekYear = 1 Then
YearOfWeek = Year(TestDate) + 1
Exit Function
End If
End If
YearOfWeek = Year(TestDate)
End If
End Function
Beide Funktionen verwenden voreingestellt die Systemeinstellungen für die Definitionen von erstem Wochentag und erster Kalenderwoche. In den optionalen Parametern FirstDayOfWeek und FirstWeekOfYear können Sie abweichende Definitionen festlegen.
|