Forum Discussion

wahidfajar's avatar
wahidfajar
Copper Contributor
Oct 12, 2023
Solved

Calculate workhours based on weekdays on range

Hi! I have some problems calculating actual work hours for my employees based on our company regulations. Here is sample data that we need to calculate (attachment). I have been trying to cal...
  • Patrick2788's avatar
    Oct 12, 2023

    wahidfajar 

    This is similar to a recent request for 'down time' hours.  The idea is to create an array from start to finish for a given row with SEQUENCE incrementing by 1 minute.  Then it becomes a matter of filtering.

     

    ActualWorkHours(start,finish)
    =LET(
        one_minute, 0.000694444444444444,
        minutes_in_a_day, 1440,
        WorkHours, LAMBDA(start, finish,
            LET(
                minutes, (finish - start) * minutes_in_a_day,
                time_arr, SEQUENCE(minutes, , start, one_minute),
                hr_mm, time_arr - INT(time_arr),
                day_of_week, WEEKDAY(time_arr, 2),
                total, COUNT(
                    FILTER(
                        time_arr,
                        (day_of_week = 6) * (hr_mm >= 8 / 24) * (hr_mm <= 14 / 24) +
                            (day_of_week <= 5) * (hr_mm >= 8 / 24) * (hr_mm <= 16 / 24),
                        ""
                    )
                ) / 60,
                IF(COUNT(start, finish) = 2, total, "")
            )
        ),
        MAP(start, finish, WorkHours)
    )

       

Resources