FAQ 0028: Wie ermittle die Kalenderwoche und deren Daten?
von Helge Rex
Frage
Ich kenne die Kalenderwoche eines Jahres und möchte das genaue Datum des ersten Tages dieser Woche berechnen. Wie geht das?
Ich habe ein Datum und möchte berechnen, in welche Kalenderwoche es fällt. Wie geht das?
Antwort
Die Kalenderwoche, in die ein Datum fällt, kann man folgendermaßen berechnen:
Format$(Datum, "ww", vbMonday, vbFirstFourDays)
pks hatte eine Lösung vorgeschlagen, die von einem unserer Stammgäste, der r.mueller@sz-online.de genannt werden möchte, noch erweitert wurde. Hier das Ergebnis:
Function DayOfWeek(ByVal lWeek As Long, ByVal lYear As Long) As Date If CLng(Format$(DateSerial(lYear, 1, 1), "ww", vbMonday, _ vbFirstFourDays)) = 1 Then DayOfWeek = DateSerial(lYear, 1, 1) - _ CLng(Format(DateSerial(lYear, 1, 1), "w", vbMonday, _ vbFirstFourDays)) + 1 + _ (lWeek - 1) * 7 Else DayOfWeek = DateSerial(lYear, 1, 1) - _ CLng(Format(DateSerial(lYear, 1, 1), "w", vbMonday, _ vbFirstFourDays)) + 1 + _ (lWeek) * 7 End If End Function
Einen alternativen Algorithmus hat Udo Schmidt vorgeschlagen:
Function DayOfWeek(ByVal lWeek As Long, ByVal lYear As Long, _ Optional FirstDay As VbDayOfWeek = vbMonday, _ Optional FirstWeek As VbFirstWeekOfYear = vbFirstFourDays) As Date Dim D1 As Date Dim N1 As Long D1 = DateSerial(lYear, 1, 1) N1 = Weekday(D1, FirstDay) If DatePart("ww", D1, FirstDay, FirstWeek) = 1 Then N1 = FirstDay - N1 - 8 Else N1 = ((8 + N1 - FirstDay) Xor 7) - 16 End If DayOfWeek = D1 + N1 + lWeek * 7 End Function
Ihre Meinung
Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.