Imports Microsoft.VisualBasic.DateAndTime Public Class cArbeitstage Public arbtage As Integer Public monatstage(11) As Integer Public Property arbeitstage_imjahr(ByVal zahl As Integer) As Integer Get Return monatstage(zahl) End Get Set(ByVal anz As Integer) End Set End Property Public Property arbeitstage_immonat() As Integer Get Return arbtage End Get Set(ByVal anz As Integer) End Set End Property Public Function Ostern(ByVal x As Integer) As Date Dim K, M, S, D, R, A, OG, SZ, OE, OSI As Integer Dim OS1 As Double Dim OS2 As String K = Int(x / 100) M = 15 + Int((3 * K + 3) / 4) - Int((8 * K + 13) / 25) S = 2 - Int((3 * K + 3) / 4) A = x Mod 19 D = (19 * A + M) Mod 30 R = Int(D / 29) + (Int(D / 28) - Int(D / 29)) * Int(A / 11) OG = 21 + D - R SZ = 7 - (x + Int(x / 4) + S) Mod 7 OE = 7 - (OG - SZ) Mod 7 OSI = ((OG + OE) - 1) OS2 = "01.03." & x OS2 = CDate(OS2) Dim da As New Date da = OS2 OS1 = CType(da.ToOADate(), Double) OS1 = CType(da.ToOADate(), Double) OS1 = OS1 + OSI Ostern = CType(Date.FromOADate(OS1), Date) End Function Public Function arbeitstag(ByVal x As Date) As Boolean Dim feiertage(12) As Date Dim feiertag As String Dim jahr, SaSo, Arbeitst, i As Integer jahr = CInt(Format(x, "yyyy")) SaSo = CInt(Weekday(x)) arbeitstag = True If (SaSo = 1 Or SaSo = 7) Then arbeitstag = False Else feiertage(1) = DateAdd(DateInterval.Day, -2, Ostern(jahr)) feiertage(2) = DateAdd(DateInterval.Day, +1, Ostern(jahr)) feiertage(3) = DateAdd(DateInterval.Day, +50, Ostern(jahr)) feiertage(4) = DateAdd(DateInterval.Day, +39, Ostern(jahr)) feiertage(5) = DateAdd(DateInterval.Day, +60, Ostern(jahr)) feiertage(6) = (CDate("01.01." & jahr)) feiertage(7) = (CDate("01.05." & jahr)) feiertage(8) = (CDate("03.10." & jahr)) feiertage(9) = (CDate("01.11." & jahr)) feiertage(10) = (CDate("25.12." & jahr)) feiertage(11) = (CDate("26.12." & jahr)) For i = 1 To 11 If x = feiertage(i) Then arbeitstag = False Exit For End If Next End If End Function Public Function arbeitstage(ByVal x_dat As Date, ByVal zahl As Integer) Dim tage, m, anz, i As Integer Dim wert As String ' unterscheiden, ob Jahres oder Monatsberechnung ' anhand Parameter "zahl" Select Case zahl Case 1 ' jeden Monat durchlaufen For m = 1 To 12 Dim datum As New Date datum = "#01/" & m & "/" & Year(x_dat) & "#" ' Anzahl der Tage im Monat ermitteln tage = Date.DaysInMonth(Year(x_dat), Month(datum)) anz = 0 ' alle Tage überprüfen ob Arbeitstag! For i = 1 To tage wert = "#" & i & "/" & m & "/" & Year(x_dat) & "#" If arbeitstag(wert) Then anz = anz + 1 End If Next ' Anzahl der Arbeitstage im Array speichern monatstage(m - 1) = anz Next Case 2 ' Anzahl der Tage im Monat ermitteln tage = Date.DaysInMonth(Year(x_dat), Month(x_dat)) ' alle Tage überprüfen ob Arbeitstag! For i = 1 To tage wert = "#" & i & "/" & Month(x_dat) & "/" & Year(x_dat) & "#" If arbeitstag(wert) Then anz = anz + 1 End If Next ' Anzahl der Arbeitstage speichern arbtage = anz End Select Return anz End Function End Class