/// <summary> /// The number of complete months in the period, return a double value. /// </summary> /// <param name="start"></param> /// <param name="end"></param> /// <returns></returns> public static double ExactMonthDiff(DateTime start, DateTime end) { DateTime _start, _end; if (start <= end) { _start = start; _end = end; } else { _start = end; _end = start; } var diff = PrivateMonthDiff(_start, _end); var endStart = start.AddCompleteMonths(diff); var endEnd = endStart.AddCompleteMonths(1); return(diff + (end - endStart).TotalDays / (endEnd - endStart).TotalDays); }