def diff(self, end_date):
if end_date < self:<EOL><INDENT>y, m, d = BusinessDate.diff(end_date, self)<EOL>return -y, -m, -d<EOL><DEDENT>y = end_date.year - self.year<EOL>m = end_date.month - self.month<EOL>while m < <NUM_LIT:0>:<EOL><INDENT>y -= <NUM_LIT:1><EOL>m += <NUM_LIT:12><EOL><DEDENT>while m > <NUM_LIT:12>:<EOL><INDENT>y += <NUM_LIT:1><EOL>m -= <NUM_LIT:12><EOL><DEDENT>s = BusinessDate.add_years(BusinessDate.add_months(self, m), y)<EOL>d = BusinessDate.diff_in_days(s, end_date)<EOL>if d < <NUM_LIT:0>:<EOL><INDENT>m -= <NUM_LIT:1><EOL>if m < <NUM_LIT:0>:<EOL><INDENT>y -= <NUM_LIT:1><EOL>m += <NUM_LIT:12><EOL><DEDENT>s = BusinessDate.add_years(BusinessDate.add_months(self, m), y)<EOL><DEDENT>d = BusinessDate.diff_in_days(s, end_date)<EOL>return -int(y), -int(m), -int(d)<EOL>
difference expressed as a tuple of years, months, days
(see also the python lib dateutils.relativedelta)

:param BusinessDate start_date:
:param BusinessDate end_date:
:return (int, int, int):