For the days, hours and minutes, you can have the foolowing approach:
Days
import datetime
a = datetime.datetime(2017, 6, 21, 18, 25, 30)
b = datetime.datetime(2017, 5, 16, 8, 21, 10)
ts_start=a
ts_end=b
ts_diff=ts_end-ts_start
secs=ts_diff.total_seconds()
days,secs=divmod(secs,secs_per_day:=60*60*24)
answer='Duration={} days'.format(int(days))
Hours
import datetime
a = datetime.datetime(2017, 6, 21, 18, 25, 30)
b = datetime.datetime(2017, 5, 16, 8, 21, 10)
ts_start=a
ts_end=b
ts_diff=ts_end-ts_start
secs=ts_diff.total_seconds()
hrs,secs=divmod(secs,secs_per_hr:=60*60)
answer='Duration={} hrs'.format(int(hrs))
Minutes
import datetime
a = datetime.datetime(2017, 6, 21, 18, 25, 30)
b = datetime.datetime(2017, 5, 16, 8, 21, 10)
ts_start=a
ts_end=b
ts_diff=ts_end-ts_start
secs=ts_diff.total_seconds()
mins,secs=divmod(secs,secs_per_min:=60)
answer='Duration={} mins'.format(int(mins))
seconds
import datetime
a = datetime.datetime(2017, 6, 21, 18, 25, 30)
b = datetime.datetime(2017, 5, 16, 8, 21, 10)
ts_start=a
ts_end=b
ts_diff=ts_end-ts_start
secs=ts_diff.total_seconds()
answer='Duration={} secs'.format(int(secs))
As for months, it is a little trickier. The best way to do this is given here Best way to find the months between two dates