Vielen Dank an Dich, Manfred..
ich habe das Ganze noch ein wenig umgebaut und angepasst und folgender Code kam dabei heraus..
Private Function MonthsInTimespan(intervalstart As Date, intervalend As Date) _
As String()
If intervalstart.Ticks > intervalend.Ticks Then
Throw New ArgumentException("No Timespan")
End If
Dim months As New List(Of String)
If intervalstart.Year = intervalend.Year Then
'Beide Datumsangaben im gleichen Jahr ...
Dim i As Integer = intervalstart.Month
months.Add(DateAndTime.MonthName(i) & " " & DateTime.DaysInMonth( _
intervalstart.Year, intervalstart.Month) - intervalstart.Day)
For y As Integer = intervalstart.Month + 1 To intervalend.Month - 1
months.Add(DateAndTime.MonthName(y) & " " & _
DateTime.DaysInMonth(intervalend.Year, y))
Next
Dim z As Integer = intervalend.Month
months.Add(DateAndTime.MonthName(z) & " " & DateDiff("d", _
DateSerial(intervalend.Year, intervalend.Month, 0), intervalend))
ElseIf intervalstart.Year + 1 = intervalend.Year Then
'Zwischen den Datumsangaben liegt ein Jahreswechsel
Dim i As Integer = intervalstart.Month
months.Add(DateAndTime.MonthName(i) & " " & DateTime.DaysInMonth( _
intervalstart.Year, intervalstart.Month) - intervalstart.Day)
For x As Integer = intervalstart.Month + 1 To 12
months.Add(DateAndTime.MonthName(x) & " " & _
DateTime.DaysInMonth(intervalstart.Year, x))
Next
For y As Integer = 1 To intervalend.Month - 1
months.Add(DateAndTime.MonthName(y) & " " & _
DateTime.DaysInMonth(intervalend.Year, y))
Next
Dim z As Integer = intervalend.Month
months.Add(DateAndTime.MonthName(z) & " " & DateDiff("d", _
DateSerial(intervalend.Year, intervalend.Month, 0), intervalend))
Else
Throw New ArgumentException("Not implemented")
End If
ListBox1.DataSource = months
Return months.ToArray
End FunctionAufruf:
Dim Startdatum As Date = "15.03.2018"
Dim Enddatum As Date = "25.04.2019"
Dim m() = MonthsInTimespan(CDate(Startdatum), CDate(Enddatum)) Hiermit werden jetzt innerhalb der vorgegebenen Zeitspanne alle dazwischenliegenden Monate wiedergegeben und die dazugehörigen Tage, also wird für den (15.03.2018) März 16 wiedergegeben, also die Tage bis zum Monatsende.
Für den (25.04.2019) kommt folglich April 25 heraus, also die Tage bis zum Enddatum.
Lieben Gruß |