| |
VB.NET - Ein- und UmsteigerDatumberechnung Zeitspanne | | | Autor: manuelhasi | Datum: 16.12.18 16:36 |
| Hallo..
gibt es eine Möglichkeit zu berechnen, welche Monate sich zwischen zwei Daten bzw. innerhalb einer Zeitspanne befinden?
Bespiel:
01.01.2018 - 15.03.2018 -> Ergebnis: Januar, Februar, März
10.09.2017 - 13.02.2019 -> Ergebnis: September, Oktober, November, Dezember, Januar, Februar | |
Re: Datumberechnung Zeitspanne | | | Autor: manuelhasi | Datum: 16.12.18 19:03 |
| Ein weiteres Ziel ist es, die Tage der Zeitspanne, die sich innerhalb dieser Monate befinden, zu berechnen.
Im Beispiel oben:
Januar 31 Tage, Februar 28/29 Tage, März 15 Tage
Das könnte man dann ja eigentlich mit der Funktion
'Letzter Tag des Monats
Public Function IsLastDayOfMonth(ByVal Datum As Date) As Boolean
Return Not Datum.Month = Datum.AddDays(1).Month
End Function und einer Differenzberechnung machen ??
Dim differenz as long= DateDiff("d", datum1, datum2) | |
Re: Datumberechnung Zeitspanne | | | Autor: Manfred X | Datum: 16.12.18 23:34 |
| Hallo!
Irgend sowas .....
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 ...
For i As Integer = intervalstart.Month To intervalend.Month
months.Add(DateAndTime.MonthName(i))
Next i
ElseIf intervalstart.Year + 1 = intervalend.Year Then
'Zwischen den Datumsangaben liegt ein Jahreswechsel
For i As Integer = intervalstart.Month To 12
months.Add(DateAndTime.MonthName(i))
Next i
For i As Integer = 1 To intervalend.Month
months.Add(DateAndTime.MonthName(i))
Next i
Else
Throw New ArgumentException("Not implemented")
End If
Return months.ToArray
End Function Aufrufbeispiel:
Dim m() = MonthsInTimespan(CDate("15.1.18"), CDate("15.9.19")) | |
Re: Datumberechnung Zeitspanne | | | Autor: Manfred X | Datum: 16.12.18 23:41 |
| Die Spannentage innerhalb des ersten Monats lassen sich so ermitteln:
Dim dtx As New Date(2018, 4, 12)
Dim days As Integer = DateTime.DaysInMonth(dtx.Year, dtx.Month) - dtx.Day + 1 | |
Re: Datumberechnung Zeitspanne | | | Autor: manuelhasi | Datum: 17.12.18 20:49 |
| 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 Function Aufruf:
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ß | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|