如何计算工作日为 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
我需要一些帮助来计算两个日期之间的工作时间,但一天工作 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