Как рассчитать часы между датами с 8-часовым рабочим днем ​​и учетом выходных? (VB. net) - PullRequest
0 голосов
/ 30 января 2020

Мне нужна помощь в подсчете часов, отработанных между двумя датами, но с 8-часовым рабочим днем. Я также должен приспособиться к выходным, чтобы я не сказал, что кто-то занял больше времени, чем они на самом деле. Я использую VB. net

Например, date1 - 1/23/2020 9:00:00 AM, дата начала и date2 - 1/27/2020 1:30:00 PM, время окончания sh.

Если я запускаю этот код:

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

он даст мне общее количество часов, но будет включать выходные дни, а не фильтровать его в течение 8 часов.

Как отфильтровать время рабочего дня и выходные? Буду признателен за любую помощь в уточнении этого

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Один из возможных вариантов

'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 часов для каждого оставшегося дня.

Конечно, вы добавили бы к итогу часы первого и последнего дня.

0 голосов
/ 30 января 2020

Простой л oop

    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
...