locked
How to Calculate number of weekend days between the two dates?

    Question

  • If start date is 08/17/2006 (17th august) and end date is 08/29/2006 the total number of weekend days are 4
    Thursday, August 17, 2006 5:39 PM

Answers

  • Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim BeginDate As Date = New Date(2006, 8, 16)

    Dim EndDate As Date = New Date(2006, 8, 28)

    MsgBox("Weekend days:" & CountWeekEnds(BeginDate, EndDate).ToString)

    End Sub

    Private Function CountWeekEnds(ByVal BeginDate As Date, ByVal EndDate As Date) As Integer

    Dim Days As Integer

    Do While BeginDate < EndDate

    If BeginDate.DayOfWeek = DayOfWeek.Saturday OrElse BeginDate.DayOfWeek = DayOfWeek.Sunday Then

    Days += 1

    End If

    BeginDate = BeginDate.AddDays(1)

    Loop

    Return Days

    End Function

    Thursday, August 17, 2006 6:35 PM
  • Or a non looping suggestion:

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

    MessageBox.Show(GetWeekEndDays(Me.DateTimePicker1.Value, Me.DateTimePicker2.Value))

    End Sub

    Public Function GetWeekEndDays(ByVal SD As Date, ByVal ED As Date) As Integer

    Dim DaysDiff As Integer = DateDiff(DateInterval.Day, SD, ED)

    Dim NumWeekEndDays As Integer

    NumWeekEndDays = CInt((DaysDiff / 7) * 2)

    If SD.DayOfWeek = DayOfWeek.Saturday Or SD.DayOfWeek = DayOfWeek.Sunday _

    Or ED.DayOfWeek = DayOfWeek.Saturday Or ED.DayOfWeek = DayOfWeek.Sunday Then

    NumWeekEndDays += 1

    End If

    Return NumWeekEndDays

    End Function

    Thursday, August 17, 2006 6:45 PM
    Moderator

All replies

  • Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim BeginDate As Date = New Date(2006, 8, 16)

    Dim EndDate As Date = New Date(2006, 8, 28)

    MsgBox("Weekend days:" & CountWeekEnds(BeginDate, EndDate).ToString)

    End Sub

    Private Function CountWeekEnds(ByVal BeginDate As Date, ByVal EndDate As Date) As Integer

    Dim Days As Integer

    Do While BeginDate < EndDate

    If BeginDate.DayOfWeek = DayOfWeek.Saturday OrElse BeginDate.DayOfWeek = DayOfWeek.Sunday Then

    Days += 1

    End If

    BeginDate = BeginDate.AddDays(1)

    Loop

    Return Days

    End Function

    Thursday, August 17, 2006 6:35 PM
  • Or a non looping suggestion:

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

    MessageBox.Show(GetWeekEndDays(Me.DateTimePicker1.Value, Me.DateTimePicker2.Value))

    End Sub

    Public Function GetWeekEndDays(ByVal SD As Date, ByVal ED As Date) As Integer

    Dim DaysDiff As Integer = DateDiff(DateInterval.Day, SD, ED)

    Dim NumWeekEndDays As Integer

    NumWeekEndDays = CInt((DaysDiff / 7) * 2)

    If SD.DayOfWeek = DayOfWeek.Saturday Or SD.DayOfWeek = DayOfWeek.Sunday _

    Or ED.DayOfWeek = DayOfWeek.Saturday Or ED.DayOfWeek = DayOfWeek.Sunday Then

    NumWeekEndDays += 1

    End If

    Return NumWeekEndDays

    End Function

    Thursday, August 17, 2006 6:45 PM
    Moderator
  • Anyone know why the code doesn't format properly?
    Thursday, August 17, 2006 6:54 PM
  • Depending on your requirements, you may need to change the < to <= in my do loop.
    Thursday, August 17, 2006 6:59 PM
  • DMan1 your solution is not generating right result?
    Thursday, August 17, 2006 7:00 PM
  • I did test the code...Can you please give me sample dates that would produce errouneous results?

     

    Even if I reversed the dats I am getting a negitive but the actual number of weekend days seems to be correct...but the proof is in the pudding...all we need is one sample where it produces the wrong answer

    Thursday, August 17, 2006 7:53 PM
    Moderator
  • Can you please give me sample dates that would produce errouneous results?

    8/26/06 - 8/27/06.

    Thursday, August 17, 2006 8:09 PM