Skip to content

Networkdays functions ... including `networkdays` excel like function with no dependencies (no NumPy)

License

Notifications You must be signed in to change notification settings

cadu-leite/networkdays

Folders and files

NameName
Last commit message
Last commit date

Latest commit

170558a · Jun 25, 2022

History

54 Commits
Jun 18, 2020
Dec 28, 2020
Jun 25, 2022
Dec 26, 2020
Jun 14, 2020
Dec 26, 2020
Jun 14, 2020
Sep 13, 2021
Sep 12, 2021
Jun 7, 2020
Jun 25, 2022

Repository files navigation

Networkdays

some statistics ...

Pypi Version Doc Status Coverage Downloads
pypi version Documentation Status code coverage Downloads on Pypi

  • Business days calendar.
  • JobSchedule on business days.

Tip

Just Python built-in libs, no dependencies

Networkdays:

Return working days between two dates exclude weekends and holidays.

  • just like spreadsheets networdays function
  • exclude Holidays
  • Exclude "days off" per week.
Job schedule:
Calculate the period for a given job hours, based on Networdays.

python-networkdays can be installed from PyPI using pip

pip install python-networkdays

Tip

note that the package name is different from the importable name

Page on Pypi: https://pypi.org/project/python-networkdays/

There is no dependencies.

  • Return a list of business days between 2 dates.
  • Exclude weekends by default
  • Custom "days off" may be informed as list like {1,2,3,4,5,6,7}, where 1 is Monday default is {6,7} = (Sat, Sun).
  • How many business days between two dates.
  • How many days off, including holidays and weekends.
  • Return a list of business days for a given number of hours
  • Return a list of Years, months or weeks for a given number of hours
  • No Pandas or NumPy dependencies
In [1]: from networkdays import networkdays

In [2]: import datetime

In [3]: HOLIDAYS = { datetime.date(2020, 12, 25) }  # define a Holidays list

# initiate  class::`networkdays.Networkdays`
In [4]: days = networkdays.Networkdays(
            datetime.date(2020, 12, 15),  # start date
            datetime.date(2020, 12, 31),  # end date
            HOLIDAYS  # list of Holidays
        )

In [5]: days.networkdays()  # return a list os workdays
Out[5]:
[datetime.date(2020, 12, 15),
 datetime.date(2020, 12, 16),
 datetime.date(2020, 12, 17),
 datetime.date(2020, 12, 18),
 datetime.date(2020, 12, 21),
 datetime.date(2020, 12, 22),
 datetime.date(2020, 12, 23),
 datetime.date(2020, 12, 24),
 datetime.date(2020, 12, 28),
 datetime.date(2020, 12, 29),
 datetime.date(2020, 12, 30),
 datetime.date(2020, 12, 31)]

In [6]: days.weekends()  # list os Weekends (default = Saturday ans Sunday)
Out[6]:
[datetime.date(2020, 12, 19),
 datetime.date(2020, 12, 20),
 datetime.date(2020, 12, 26),
 datetime.date(2020, 12, 27)]

In [7]: days.holidays()
Out[7]: [datetime.date(2020, 12, 25)] # list of holidays
>>> from networkdays import networkdays
>>> import datetime
>>> # Distribute the 600 hrs of effort, starting on december 1, 2020 working 8hrs per day.
>>> jobschedule = networkdays.JobSchedule(600, 8, datetime.date(2020, 12, 1), networkdays=None)
>>> job_dates = jobschedule.job_workdays()
>>> jobschedule.bussines_days
54
>>> jobschedule.total_days
datetime.timedelta(days=73)
>>> jobschedule.prj_starts
'12/01/20'
>>> jobschedule.prj_ends
'02/12/21'
>>> list(jobschedule.years())
[2020, 2021]
>>> list(jobschedule.months())
[12, 1, 2]
>>> list(jobschedule.weeks()) # ISO
[49, 50, 51, 52, 53, 1, 2, 3, 4, 5, 6]
>>> f'days: {list(jobschedule.days())[:2]} ... {list(jobschedule.days())[-2:]}'
'days: [datetime.date(2020, 12, 1), datetime.date(2020, 12, 2)] ... [datetime.date(2021, 2, 11), datetime.date(2021, 2, 12)]'

When I start to code, I did check for some similar projects.

I knew about python-dateutil, a great project I use for years... I'd like something more straightforward or simpler.

After to publish the python-networkdays on PyPi I found some others 8(

I will try to keep this list updated...

More on ..

https://networkdays.readthedocs.io/index.html

https://libraries.io/pypi/python-networkdays/sourcerank