2020-10-07 15:18:43 +00:00
|
|
|
from datetime import datetime, timedelta, tzinfo
|
|
|
|
|
2013-06-06 11:26:05 +00:00
|
|
|
|
|
|
|
ZERO = timedelta(0)
|
|
|
|
HOUR = timedelta(hours=1)
|
|
|
|
|
2016-12-24 11:41:01 +00:00
|
|
|
|
2013-06-06 11:26:05 +00:00
|
|
|
# A UTC class.
|
|
|
|
|
2019-04-06 04:13:12 +00:00
|
|
|
|
2013-06-06 11:26:05 +00:00
|
|
|
class UTC(tzinfo):
|
|
|
|
"""UTC"""
|
|
|
|
|
|
|
|
def utcoffset(self, dt):
|
|
|
|
return ZERO
|
|
|
|
|
|
|
|
def tzname(self, dt):
|
|
|
|
return "UTC"
|
|
|
|
|
|
|
|
def dst(self, dt):
|
|
|
|
return ZERO
|
|
|
|
|
2016-12-24 11:41:01 +00:00
|
|
|
|
2013-06-06 11:26:05 +00:00
|
|
|
utc = UTC()
|
|
|
|
|
|
|
|
|
2016-12-24 11:41:01 +00:00
|
|
|
def get_age(old_date, now=None):
|
|
|
|
def is_naive(date):
|
2013-06-06 17:54:27 +00:00
|
|
|
return date.tzinfo is None or date.tzinfo.utcoffset(date) is None
|
2016-12-24 11:41:01 +00:00
|
|
|
|
2013-06-07 09:27:56 +00:00
|
|
|
if now is None:
|
|
|
|
now = datetime.utcnow().replace(tzinfo=utc)
|
2016-12-24 11:41:01 +00:00
|
|
|
if is_naive(old_date) == is_naive(now):
|
2013-06-06 17:54:27 +00:00
|
|
|
pass
|
2016-12-24 11:41:01 +00:00
|
|
|
elif is_naive(old_date):
|
2013-06-06 17:54:27 +00:00
|
|
|
old_date = old_date.replace(tzinfo=utc)
|
|
|
|
else:
|
|
|
|
now = now.replace(tzinfo=utc)
|
|
|
|
|
2013-06-06 11:26:05 +00:00
|
|
|
delta = now - old_date
|
|
|
|
if delta.days > 0:
|
2019-04-06 04:13:12 +00:00
|
|
|
return "{0} days".format(delta.days)
|
2013-06-06 11:26:05 +00:00
|
|
|
if delta.seconds > 3600:
|
2019-04-06 04:13:12 +00:00
|
|
|
return "{0} hours".format(delta.seconds // 3600)
|
2013-06-06 11:26:05 +00:00
|
|
|
if delta.seconds > 60:
|
2019-04-06 04:13:12 +00:00
|
|
|
return "{0} minutes".format(delta.seconds // 60)
|
|
|
|
return "{0} seconds".format(delta.seconds)
|