#!/usr/bin/env python

import calendar
import datetime
import dateutil
import dateutil.parser
import os
import sys

def usage():
 print "Usage: %s start-date end-date" % (os.path.basename(sys.argv[0]))

def diff_dates(start, end):

 months = (end.year - start.year)\*12 + end.month - start.month
 years = months / 12
 months = months % 12
 days = end.day - start.day

 if days < 0:
 months -= 1
 if months < 0:
 months = 11
 years -= 1
 days = calendar.monthrange(end.year, end.month)[1] + end.day - start.day

 return (years, months, days)

def pretty_diff(datetuple):

 (years, months, days) = datetuple

 value = ''
 if years == 1:
 value = "%d year" % (years)
 elif years > 0:
 value = "%d years" % (years)

 if months > 0:
 if len(value) > 0:
 value += ", "
 if months == 1:
 value += "%d month" % (months)
 else:
 value += "%d months" % (months)

 if days > 0 or len(value) == 0:
 if len(value) > 0:
 value += ", "
 if days == 1:
 value += "%d day" % (days)
 else:
 value += "%d days" % (days)

 return value

if __name__ == "__main__":

 if len(sys.argv) < 3:
 usage()
 sys.exit()

 start = dateutil.parser.parse(sys.argv[1]).date()
 end = dateutil.parser.parse(sys.argv[2]).date()

 if start > end:
 diff = diff_dates(end, start)
 print pretty_diff(diff)
 else:
 diff = diff_dates(start, end)
 print pretty_diff(diff) 

Updated: