calculate the difference between two datetime.date() dates in years and months
I want to calculate the difference between two datetime.date() dates in years and months.
For example;
d1 = date(2001,5,1)
d2 = date(2012,1,1)
d3 = date(2001,1,1)
d4 = date(2012,5,1)
diff1 = d2 - d1
diff2 = d4 - d3
Desired result:
diff1 == 10 years & 8 months.
diff2 == 11 years & 4 months.
Thanks.
If you are able to install the excellent dateutil package, you can do this:
>>> from dateutil import relativedelta as rdelta
>>> from datetime import date
>>> d1 = date(2001,5,1)
>>> d2 = date(2012,1,1)
>>> rd = rdelta.relativedelta(d2,d1)
>>> "{0.years} years and {0.months} months".format(rd)
'10 years and 8 months'
In python, subtracting two datetime.date
objects results in a datetime.timedelta
object, which has a days
attribute.
Turning the number of days difference into years and months is not clearly defined; if you define a year as 365 days and a month as 30 days, you could use:
years, remainder = divmod(diff1.days, 365)
months = remainder // 30
Or, you could define average year and month lengths to be (slightly) more accurate:
avgyear = 365.2425 # pedants definition of a year length with leap years
avgmonth = 365.2425/12.0 # even leap years have 12 months
years, remainder = divmod(diff1.days, avgyear)
years, months = int(years), int(remainder // avgmonth)
With the latter calculation, your second difference comes out as 11 years and 3 months.
timedelta objects don't have information about months, you might be better to compute the years and months directly
>>> d2.year - d1.year + (d2.month - d1.month)/12, (d2.month - d1.month)%12
(10, 8)
>>> d4.year - d3.year + (d4.month - d3.month)/12, (d4.month - d3.month)%12
(11, 4)