public static DateSpan FromToDates(DateTime min, DateTime max)
{
if (min > max) return FromToDates(max, min).Invert();
int years = max.Year - min.Year;
int months = max.Month - min.Month;
if (max.Day < min.Day)
months -= 1;
if (months < 0)
{
years -= 1;
months += 12;
}
int days = max.Subtract(min.AddYears(years).AddMonths(months)).Days;
return new DateSpan(years, months, days);
}