Kalenderwoche zu Tagen umrechnen

  • Ich habe eine Funktion gebraucht, die mir die Tage einer Kalenderwoche ausgibt, und da hier schon jemand nach etwas ähnlichem gefragt hat, hier die Funktion, vielleicht kann sie einer von euch ja auch noch gebrauchen.

    Spoiler anzeigen
    [autoit]

    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _DateWeekISOtoDate
    ; Description ...: Liefert die Tage der gewählten Kalenderwoche
    ; Syntax.........: _DateWeekISOtoDate($iKW, $iYear = @YEAR)
    ; Parameters ....: $iKW - Die Kalenderwoche, dessen Tage gesucht werden sollen
    ; $iYear - Das Jahr (Standart = Aktuelles Jahr)
    ; Return values .: Success - Eindimensionales Array mit den Tagen der gesuchten Woche.
    ; - In $Result[0] steht die Anzahl an Wochen des Jahres
    ; Failure - Returns 0 and Sets @Error:
    ; |0 - Kein Fehler
    ; |1 - $iKW ist keine Zahl
    ; |2 - $iKW ist kleiner 1 oder größer 53
    ; |3 - $iKW ist 53, es gibt aber nur 52 Wochen
    ; |4 - $iYear ist keine Zahl
    ; |5 - $iYear ist kein Jahr
    ; Author ........: TheLuBu ([email='LuBu@veytal.com'][/email])
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ;
    ; ;==========================================================================================
    Func _DateWeekISOtoDate($iKW, $iYear = @YEAR)
    If Not StringIsDigit($iKW) THen Return SetError(1,0,0)
    If $iKW = 0 Or $iKW > 53 Then Return SetError(2,0,0)
    If Not StringIsDigit($iYear) THen Return SetError(4,0,0)
    If Not StringLen($iYear) = 4 THen Return SetError(5,0,0)
    Local $s4thjanuary, $s1thjanuary, $idatereduce, $iMaxWeeks, $asReturndate[8]
    $s4thjanuary = _DateToDayOfWeek($iYear, "01", "04")
    $s1thjanuary = _DateToDayOfWeek($iYear, "01", "01")
    For $i = 1 To 6
    $idatereduce = $s4thjanuary - $i
    If $idatereduce = 2 Then ExitLoop
    Next
    $sFirstDayWeekISO = _DateAdd("D", -$i, $iYear & "/01/04")
    Switch $s1thjanuary
    Case 5 ;Donnerstag
    $iMaxWeeks = 53
    Case 4 ;Mittwoch
    If _DateIsLeapYear($iYear) Then
    $iMaxWeeks = 53
    Else
    $iMaxWeeks = 52
    EndIf
    Case Else
    $iMaxWeeks = 52
    EndSwitch
    If $iMaxWeeks = 52 And $iKW = 53 Then SetError(3,0,0)
    $asReturndate[0] = $iMaxWeeks
    For $i = 1 To 7
    $asReturndate[$i] = _DateAdd("w", $iKW - 1, _DateAdd("D", $i-1, $sFirstDayWeekISO))
    Next
    Return $asReturndate
    EndFunc ;==>_DateWeekISOtoDate

    [/autoit]