VB.NET - подсчет дней между двумя датами с исключениями - PullRequest
2 голосов
/ 29 января 2012

Я пытаюсь сосчитать дни между двумя датами, исключая субботы и воскресенья . Я написал этот код до сих пор

Dim startDay As Integer
Dim endDay As Integer
Dim days As Integer
Dim count As Integer

startDay = dtpStartDate.Value.DayOfWeek
endDay = dtpEndDate.Value.DayOfWeek

For days = startDay To endDay
    If days = 0 Or days = 6 Then           'Sunday = 0, Saturday = 6
        count += 1
    End If
Next

    lblNoOfDays.Text = count

Работает нормально, если вы выберете две даты на одной неделе. (например: 23 января - 27 января, результат 5) Но если я установлю для них даты в разные недели (например, с 23 января по 30 января, результат будет 1), это даст неверные результаты.

Я знаю, что это происходит из-за петли, но я не могу придумать, как это преодолеть. Может ли кто-нибудь дать мне предложение, решение ??

Спасибо

Ответы [ 2 ]

7 голосов
/ 29 января 2012
Dim count = 0
Dim totalDays = (dtpEndDate - dtpStartDate).Days

For i = 0 To totalDays
    Dim weekday As DayOfWeek = startDate.AddDays(i).DayOfWeek
    If weekday <> DayOfWeek.Saturday AndAlso weekday <> DayOfWeek.Sunday Then
        count += 1
    End If
Next

lblNoOfDays.Text = count
1 голос
/ 29 марта 2017

Эта функция вычисляет дни, не относящиеся к выходным, между двумя датами:

    Public Shared Function WorkingDaysElapsed(ByVal pFromDate As Date, ByVal pToDate As Date) As Integer

        Dim _elapsedDays As Integer = 0
        Dim _weekendDays As DayOfWeek() = {DayOfWeek.Saturday, DayOfWeek.Sunday}

        For i = 0 To (pToDate - pFromDate).Days
            If Not _weekendDays.Contains(pFromDate.AddDays(i).DayOfWeek) Then _elapsedDays += 1
        Next

        Return _elapsedDays

    End Function
...