Feedback

Prüfen ob ein Datum zwischen zwei anderen liegt

Sprache: VB

Mit diesem Snippet läst sich überprüfen ob ein Datum zwischen zwei anderen liegt. Das Snippet wird über [b]Day_between_days (Start Datum,Enddatum, Vergleichs Datum, True/False)[/b] 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: [code] If Day_between_days("1.5.2012", "6.5.2012", "3.5.2012", False) = True Then MsgBox("ja") Else MsgBox("nein") End If[/code] 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
  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

2 Kommentare

  1. 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:
    [code]
    _
    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 [/code] Außerdem wäre es nicht schlecht, wenn es sich um eine Erweiterungsmethode handelt 😉

  2. Durch eine sinnvolle Umbenennung der Methode, kann sogar noch ein wenig vereinfacht werden.

    [code]
    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 [/code]