Skip to content

Instantly share code, notes, and snippets.

@valdergallo
Last active November 13, 2023 20:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save valdergallo/8ea8c42fa68b9a6e2555a9328691ce76 to your computer and use it in GitHub Desktop.
Save valdergallo/8ea8c42fa68b9a6e2555a9328691ce76 to your computer and use it in GitHub Desktop.
Calculate the next valid date
from dateutil.relativedelta import relativedelta
from datetime import datetime
WEEKLY = relativedelta(weeks=1)
BIWEEKLY = relativedelta(weeks=2)
MONTHLY = relativedelta(months=1)
YEARLY = relativedelta(years=1)
def get_next_date(
start_date: datetime,
frequency: relativedelta,
end_date: datetime = None,
limit: int = 1,
):
"""Calculate the next date calculating the end dates of month and
leap year
Args:
start_date (datetime): Start date
frequency (relativedelta): Frequency configuration
end_date (datetime, optional): End date to return. Defaults to None.
limit (int, optional): Limit dates to return. Defaults to 1.
Yields:
datetime: Return a datetime
"""
if limit:
for count in range(1, limit + 1):
next_date = start_date + (count * frequency)
if end_date and next_date > end_date:
break
yield next_date
elif end_date and not limit:
next_date = start_date
count = 1
while next_date < end_date:
next_date = start_date + (count * frequency)
count += 1
yield next_date
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment