Move functions out of web_view.py
This commit is contained in:
parent
e66945a825
commit
a873060949
3 changed files with 77 additions and 75 deletions
|
|
@ -1,23 +1,56 @@
|
|||
"""Utility functions."""
|
||||
|
||||
import datetime
|
||||
from datetime import date, datetime, timezone
|
||||
|
||||
DateOrDateTime = datetime.datetime | datetime.date
|
||||
DateOrDateTime = datetime | date
|
||||
|
||||
|
||||
def as_date(d: DateOrDateTime) -> datetime.date:
|
||||
def as_date(d: DateOrDateTime) -> date:
|
||||
"""Convert datetime to date."""
|
||||
if isinstance(d, datetime.datetime):
|
||||
if isinstance(d, datetime):
|
||||
return d.date()
|
||||
assert isinstance(d, datetime.date)
|
||||
assert isinstance(d, date)
|
||||
return d
|
||||
|
||||
|
||||
def as_datetime(d: DateOrDateTime) -> datetime.datetime:
|
||||
def as_datetime(d: DateOrDateTime) -> datetime:
|
||||
"""Date/time of event."""
|
||||
t0 = datetime.datetime.min.time()
|
||||
t0 = datetime.min.time()
|
||||
return (
|
||||
d
|
||||
if isinstance(d, datetime.datetime)
|
||||
else datetime.datetime.combine(d, t0).replace(tzinfo=datetime.timezone.utc)
|
||||
if isinstance(d, datetime)
|
||||
else datetime.combine(d, t0).replace(tzinfo=timezone.utc)
|
||||
)
|
||||
|
||||
|
||||
def human_readable_delta(future_date: date) -> str | None:
|
||||
"""
|
||||
Calculate the human-readable time delta for a given future date.
|
||||
|
||||
Args:
|
||||
future_date (date): The future date as a datetime.date object.
|
||||
|
||||
Returns:
|
||||
str: Human-readable time delta.
|
||||
"""
|
||||
# Ensure the input is a future date
|
||||
if future_date <= date.today():
|
||||
return None
|
||||
|
||||
# Calculate the delta
|
||||
delta = future_date - date.today()
|
||||
|
||||
# Convert delta to a more human-readable format
|
||||
months, days = divmod(delta.days, 30)
|
||||
weeks, days = divmod(days, 7)
|
||||
|
||||
# Formatting the output
|
||||
parts = []
|
||||
if months > 0:
|
||||
parts.append(f"{months} months")
|
||||
if weeks > 0:
|
||||
parts.append(f"{weeks} weeks")
|
||||
if days > 0:
|
||||
parts.append(f"{days} days")
|
||||
|
||||
return " ".join(parts) if parts else None
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue