Add utility function to get next drawing date
This commit is contained in:
1 parent
109bf4ac2c
commit
7d9b69f528
1 file changed
+47
@@ -0,0 +1,47 @@
|
||||
from datetime import datetime
|
||||
from dateutil.relativedelta import relativedelta, MO, TU, WE, FR
|
||||
|
||||
|
||||
def get_next_draw_date(game: str, from_date: str | None = None) -> str:
|
||||
"""
|
||||
Gets the next drawing date from the current or specified date for the given game
|
||||
:param game: megamillions or powerball
|
||||
:param from_date: date to get next drawing date from, if omitted the current date is used
|
||||
:return: next drawing date
|
||||
|
||||
Examples:
|
||||
>>> get_next_draw_date(game='mega', from_date='02/15/2026')
|
||||
'02/17/2026'
|
||||
>>> get_next_draw_date(game='power', from_date='02/15/2026')
|
||||
'02/16/2026'
|
||||
"""
|
||||
return_date = ''
|
||||
return_date_format = '%m/%d/%Y'
|
||||
# if no date was specified, use today's date
|
||||
if from_date is None:
|
||||
from_date = datetime.today()
|
||||
else:
|
||||
from_date = datetime.strptime(from_date, return_date_format)
|
||||
|
||||
day_of_week = from_date.weekday()
|
||||
|
||||
# target the selected game
|
||||
if game == 'megamillions':
|
||||
"""drawings are on Tuesday and Friday"""
|
||||
if day_of_week in [1, 4]:
|
||||
return_date = from_date.strftime(return_date_format)
|
||||
elif day_of_week in [2, 3]:
|
||||
return_date = (from_date + relativedelta(weekday=FR)).strftime(return_date_format)
|
||||
elif day_of_week in [5, 6, 0]:
|
||||
return_date = (from_date + relativedelta(weekday=TU)).strftime(return_date_format)
|
||||
elif game == 'powerball':
|
||||
"""drawings are on Monday, Wednesday, and Friday"""
|
||||
if day_of_week in [0, 2, 4]:
|
||||
return_date = from_date.strftime(return_date_format)
|
||||
elif day_of_week == 1:
|
||||
return_date = (from_date + relativedelta(weekday=WE)).strftime(return_date_format)
|
||||
elif day_of_week == 3:
|
||||
return_date = (from_date + relativedelta(weekday=FR)).strftime(return_date_format)
|
||||
elif day_of_week in [5, 6]:
|
||||
return_date = (from_date + relativedelta(weekday=MO)).strftime(return_date_format)
|
||||
return return_date
|
||||
Reference in new issue
Block a user