Home > other >  How many weekdays, holidays or weekend days are within a dates range
How many weekdays, holidays or weekend days are within a dates range

Time:03-26

I have a situation where I have a code with which I am processing data for operated shifts.

In it, I have arrays for start and end of shifts (e.g. shift_start[0] and shift_end[0] for shift #1), and for the time between them, I need to know how many weekdays, holidays or weekend days.

The holidays I have already defined in an array of datetime entries, which should represent the holidays of a specific country (it's not the same as here and I do not seek for further more dynamic options here yet).

So basically I have it like that:

started = [datetime.datetime(2022, 2, 1, 0, 0), datetime.datetime(2022, 2, 5, 8, 0), datetime.datetime(2022, 2, 23, 11, 19, 28)]
ended = [datetime.datetime(2022, 2, 2, 16, 0), datetime.datetime(2022, 2, 5, 17, 19, 28), datetime.datetime(2022, 4, 26, 12, 30)]

holidays = [datetime.datetime(2022, 1, 3), datetime.datetime(2022, 3, 3), datetime.datetime(2022, 4, 22), datetime.datetime(2022, 4, 25)]

I'm seeking for options to go thru each of the 3 ranges and match the number of days it contains (e.g. the first range should contain 2 weekdays, the second - one weekend day)

CodePudding user response:

So based on the suggestion by @gimix, I was able to develop what I needed:

        for each_start, each_end in zip(started, ended):  # For each period 
            for single_date in self.daterange(each_start, each_end):  # For each day of each period

                # Checking if holiday or weekend
                if (single_date.replace(hour=0, minute=0, second=0) in holidays) or (single_date.weekday() > 4):
                    set_special_days_worked(1)

                # If not holiday or weekend, then it is regular working day
                else:
                    set_regular_days_worked(1)
  • Related