In [1]:
import datetime
from operator import sub
from dateutil.relativedelta import relativedelta
In [91]:
def been_alive_for(birthday, now=datetime.datetime.now()):
delta = relativedelta(now, birthday)
if delta.months:
days = 30*delta.months
else:
days = delta.days
data = {
'years': delta.years,
'weeks': days / 7,
}
data['days'] = days - (data['weeks'] * 7)
if data['weeks'] < 1:
data['days'] = days
data['weeks'] = None
else:
week_remainder = data['weeks'] - round(data['weeks'], 0)
data['weeks'] = round(data['weeks'], 0)
data['days'] = data['days'] + (week_remainder * 7)
if data['days'] < 0:
data['weeks'] = data['weeks'] - 1
data['days'] = 7 + data['days']
data['hours'] = delta.hours
data['minutes'] = delta.minutes
display = []
for key, value in data.items():
if value:
display.append(('{0} {1}'.format(round(value), key)))
return ', '.join(display)
In [92]:
been_alive_for(datetime.datetime(1986, 9, 19, 8, 22))
Out[92]:
In [93]:
been_alive_for(datetime.datetime(2000, 1, 1), datetime.datetime(2000, 1, 1, 1, 1))
Out[93]:
In [94]:
been_alive_for(datetime.datetime(2000, 1, 1), datetime.datetime(2000, 1, 1, 1, 10))
Out[94]:
In [95]:
been_alive_for(datetime.datetime(2000, 1, 1), datetime.datetime(2010, 1, 1))
Out[95]:
In [ ]: