如何计算工作日为 8 小时并计入周末的日期之间的小时数? (VB.net)

How do I calculate Hours between dates with a 8-hour work day and accounting for weekends? (VB.net)

我需要一些帮助来计算两个日期之间的工作时间,但一天工作 8 小时。我还需要针对周末进行调整,所以我不会说有人花的时间比他们实际花的时间长。我正在使用 VB.net

例如,日期 1 是开始日期 1/23/2020 9:00:00 AM,日期 2 是结束时间 1/27/2020 1:30:00 PM

如果我运行这个代码:

Dim hours As double = DateDiff(DateInterval.hour, date1, date2)

它会给我总小时数,但会包括周末,而不是将其过滤为一天 8 小时。

如何过滤掉工作日和周末?任何帮助完善这一点将不胜感激

一个可能的选择

'Get all days between the start date and the end date
Dim midDays As Date() = Enumerable.Range(0, endDate.Subtract(startDate.AddDays(1)).Days).Select(Function(offset) startDate.AddDays(offset)).ToArray
'Filter out any weekend days
Dim weekdays As Date() = midDays.Where(Function(day) day.DayOfWeek <> DayOfWeek.Saturday AndAlso day.DayOfWeek <> DayOfWeek.Sunday).ToArray
'Assume all days are a full 8 hours
Dim hoursWorked As Decimal = weekdays.Count * 8

这实际上创建了一个包含开始日期和结束日期之间所有日期的列表。从列表中删除周末并为剩余的每一天计算 8 小时。

当然,您随后会将第一天和最后一天的小时数加到总数中。

简单循环

    Dim td As DateTime
    If endDate < startDate Then
        'switch
        td = endDate
        endDate = startDate
        startDate = td
    End If
    Dim hours As Integer = 0
    td = startDate
    While td < endDate
        If td.DayOfWeek <> DayOfWeek.Saturday AndAlso td.DayOfWeek <> DayOfWeek.Sunday Then
            hours += 8
        End If
        td = td.AddDays(1)
    End While