habit_tracker / src /utils /sleep.py
GitHub Action Sync
Automated sync from GitHub
ece07d3
Raw
History Blame Contribute Delete
785 Bytes
from datetime import datetime, date, time, timedelta
def calculate_sleep_duration(yesterday_date: date, yesterday_sleep: time, today_date: date, today_wake: time) -> float:
sleep_dt = datetime.combine(yesterday_date, yesterday_sleep)
# If the user went to sleep past midnight (e.g., 01:00 AM),
# it actually belongs to 'today_date' chronologically.
if yesterday_sleep < time(12, 0): # Assuming any sleep time before noon is past midnight
sleep_dt += timedelta(days=1)
wake_dt = datetime.combine(today_date, today_wake)
duration_td = wake_dt - sleep_dt
# Fallback in case of weird overlapping data
if duration_td.total_seconds() < 0:
return 0.0
return round(duration_td.total_seconds() / 3600.0, 2)