biztime

Utility for calculating the total working time between given dates/times.


License
GPL-3.0
Install
pip install biztime==0.0.8

Documentation

biztime

biztime is a is a utility for calculating the total time between given dates/times, while omitting non-working hours, weekends, and holidays as configured by the user. Includes additional helper functions for interacting with various datetime objects.

Installation

Install and update using pip:

pip install biztime

Usage Example

>>> import biztime
>>> from datetime import date, datetime, time, timedelta
>>> bt = biztime.BizTime({
...   'biz_start': time(9, 0, 0),
...   'biz_end': time(17, 0, 0),
...   'weekend': [5, 6],
...   'holidays': [date(2018, 12, 24), date(2018, 12, 25)],
... })
>>> bt.time_diff(time(13, 0, 0), time(18, 0, 0))
datetime.timedelta(0, 14400)
>>> bt.date_diff(datetime(2018, 12, 9, 8, 0, 0), datetime(2018, 12, 15, 8, 0, 0))
datetime.timedelta(1, 57600)
>>> time_delta = bt.date_diff(datetime(2018, 12, 9, 8, 0, 0), datetime(2018, 12, 15, 8, 0, 0))
>>> biztime.convert_timedelta(time_delta, 'h')
40
>>> xmas_week = bt.date_diff(datetime(2018, 12, 23, 8, 0, 0), datetime(2018, 12, 29, 8, 0, 0))
>>> biztime.convert_timedelta(xmas_week, 'h')
24
>>> bt.is_biz_day(date(2018, 12, 25))
False

Reference

BizTime Class

BizTime(conf)
	Accepts a configuration dict to modify start/end times, weekends, and
	holidays.
	 
	Default values:
		'biz_start' - datetime.time(9, 0, 0)   # 9am
		'biz_end'   - datetime.time(17, 0, 0)  # 5pm
		'weekend'   - [5, 6]                   # Sat, Sun
		'holidays'  - []                       # None
	 
	Arg Types:
		conf - dictionary
	 
BizTime.time_diff(start, end)
	Returns a datetime.timedelta object representing the number of working hours
	between the start and end time.
	 
	Arg Types:
		start - datetime.time
		end   - datetime.time
	 
BizTime.date_diff(start, end)
	Returns a datetime.timedelta object representing the number of working hours
	between the start and end time, having omitted weekends and holidays.
	 
	Arg Types:
		start - datetime.datetime
		end   - datetime.datetime
	 
BizTime.is_biz_day(date)
	Returns a bool indicating whether the given date is a weekend or holiday per
	the users' config.
	 
	Arg Types:
		date - datetime.date
	 

Helper Functions

create_date_range(start, stop)
	Returns a list of datetime.date objects for all dates between the given start
	and end dates (inclusive).
	 
	Arg Types:
		start - datetime.date
		end   - datetime.date
	 
convert_timedelta(td, unit)
	Returns an int value representation of the given timedelta in the specified
	units.
	 
	Arg Types:
		td   - datetime.timedelta
		unit - string ('s', 'm', or 'h')
	 
dt_to_date(dt_in)
	Returns a datetime.date object from a given datetime object.
	 
	Arg Types:
		dt_in - datetime.datetime
	 
dt_to_time(dt_in)
	Returns a datetime.time object from a given datetime object.
	 
	Arg Types:
		dt_in - datetime.datetime
	 
start_of_day(date=None)
	Returns a a datetime.time object representing 12:00:00am. Returns full
	datetime.datetime object if a date is passed to it.
	 
	Arg Types:
		date - datetime.date
	 
end_of_day(date=None)
	Returns a a datetime.time object representing 11:59:59pm. Returns full
	datetime.datetime object if a date is passed to it.
	 
	Arg Types:
		date - datetime.date
	 
div_round(dividend, divisor)
	Divides two ints with proper rounding.
	 
	Arg Types:
		dividend - integer
		divisor  - integer