Source code for tahrir.utils.date_time
import math
from datetime import date, datetime, timedelta, timezone
import dateutil.relativedelta
[docs]
def get_start_week(year=None, month=None, day=None):
"""For a given date, retrieve the day the week started
For any missing parameters (ie: None), use the value of the current
day.
Arguments:
year (int): year to consider when searching a week.
month (int): month to consider when searching a week.
day (int): day to consider when searching a week.
Returns:
A Date of the day the week started either based on the
current utc date or based on the information.
"""
now = datetime.now(timezone.utc)
if not year:
year = now.year
if not month:
month = now.month
if not day:
day = now.day
week_day = date(year, month, day)
week_start = week_day - timedelta(days=week_day.weekday())
return week_start
[docs]
def singularize(term, value):
"""Strip the 's' off of plural words to dumbly singularize them."""
if value == 1:
return term[:-1]
else:
return term
[docs]
def relative_time(value: datetime):
SHORT_DENOMINATIONS = {
"years": "yrs",
"months": "mons",
"days": "days",
"hours": "hrs",
"minutes": "mins",
"seconds": "secs",
}
then_in_seconds = value.timestamp()
now_in_seconds = datetime.now(timezone.utc).timestamp()
delta = now_in_seconds - then_in_seconds
if delta > 0:
suffix = "ago"
else:
suffix = "from now"
# time_strings = []
rd = dateutil.relativedelta.relativedelta(seconds=math.fabs(delta))
denominations = ["years", "months", "days", "hours", "minutes", "seconds"]
for denomination in denominations:
value = getattr(rd, denomination, 0)
if value:
return f"{value} {singularize(SHORT_DENOMINATIONS[denomination], value)} {suffix}"
return "just now"