Feedback

VB - Prüfen ob ein Datum zwischen zwei anderen liegt

Veröffentlicht von am 4/29/2013
(1 Bewertungen)
Mit diesem Snippet läst sich überprüfen ob ein Datum zwischen zwei anderen liegt.

Das Snippet wird über
Day_between_days (Start Datum,Enddatum, Vergleichs Datum, True/False)
angesprochen und gibt ein boolesches True aus wenn das EndDatum Zwischen Start und EndDatum liegt.
Die letzte Variable gibt an ob Die Anfangs Und Enddaten miteinbezogen werden sollen.

Ein Beispiel:

  If Day_between_days("1.5.2012", "6.5.2012", "3.5.2012", False) = True Then
MsgBox("ja")
Else
MsgBox("nein")
End If

Ausgabe hier wird eine Msgbox mit dem Inhalt: "ja" sein
  Function Day_between_days(ByVal StartDate As Date, ByVal EndDate As Date, ByVal CompareDate As Date, ByVal StartEnd_involved As Boolean) As Boolean
        Dim Temp1 As Integer
        Dim Temp2 As Integer

        temp1 = Date.Compare(StartDate, CompareDate)
        Temp2 = Date.Compare(EndDate, CompareDate)

        If Date.Compare(StartDate, EndDate) < 0 Then
            If Temp2 = 0 And StartEnd_involved = True Or Temp1 = 0 And StartEnd_involved = True Then
                Return True
                Exit Function
            End If

            If Temp1 < 0 And Temp2 > 0 Then
                Return True
            Else
                Return False
            End If
        Else
            MsgBox("The start date is after the end date", MsgBoxStyle.Critical, "Error !")
            Return False
        End If

    End Function
Abgelegt unter Datum, zwischen, prüfen, Zeitspanne, Date, Time.

2 Kommentare zum Snippet

Koopakiller schrieb am 4/30/2013:
Hallo, an sich find ich die Idee gut, aber 1. sollte man Logik und Design trennen, d.h. keine MessageBox anzeigen, sondern eine Exception werfen und 2. könnte man die Methode etwas effektivieren:

<System.Runtime.CompilerServices.Extension> _
Public Function IsBetween(dt As DateTime, startDate As DateTime, endDate As DateTime, icl As Boolean) As Boolean
If endDate < startDate Then
Throw New ArgumentException("startDate > endDate")
End If
If icl Then
Return dt >= startDate AndAlso dt <= endDate
Else
Return dt > startDate AndAlso dt < endDate
End If
End Function

Außerdem wäre es nicht schlecht, wenn es sich um eine Erweiterungsmethode handelt ;)
FormFollowsFunction schrieb am 3/13/2023:
Durch eine sinnvolle Umbenennung der Methode, kann sogar noch ein wenig vereinfacht werden.

<System.Runtime.CompilerServices.Extension>
Public Function IsInRange(_value As Date, _minDate As Date, _maxDate As Date) As Boolean
If _maxDate < _minDate Then
Throw New ArgumentException("startDate > endDate")
End If
Return _value >= _minDate AndAlso _value <= _maxDate
End Function
 

Logge dich ein, um hier zu kommentieren!