time-calculator/time_calculator.py

31 lines
1.2 KiB
Python
Raw Normal View History

2023-04-18 16:25:05 +02:00
def add_time(start: str, duration: str, day: str=""):
days: list[str] = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]
day = day.casefold()
time, am_pm = start.split(" ")
time_hour, time_minute = [int(part) for part in time.split(":")]
add_hours, add_minutes = [int(part) for part in duration.split(":")]
new_time_minute = (time_minute + add_minutes)%60
new_time_hour = (time_hour + add_hours + int((time_minute + add_minutes)/60))%12
if new_time_hour == 0:
new_time_hour = 12
am_pm_revolutions = int((time_hour + add_hours + int((time_minute + add_minutes)/60))/12)
days_past = int(am_pm_revolutions/2)
new_am_pm = am_pm
if (am_pm_revolutions%2):
days_past += 1 if am_pm == "PM" else 0
new_am_pm = "AM" if am_pm == "PM" else "PM"
2020-09-29 19:15:47 +02:00
2023-04-18 16:25:05 +02:00
if days_past == 1:
days_str = " (next day)"
elif days_past > 1:
days_str = f" ({days_past} days later)"
else:
days_str = ''
2020-09-29 19:15:47 +02:00
2023-04-18 16:25:05 +02:00
if day:
new_day = f", {days[int((days.index(day)+days_past)%len(days))].capitalize()}"
else:
new_day = ""
new_time = f'{new_time_hour}:{str(new_time_minute).zfill(2)} {new_am_pm}{new_day}{days_str}'
2020-09-29 19:15:47 +02:00
return new_time