calculating the difference in months between two dates

.net, c#, datetime, timespan

Solution

You won't be able to get that from a `TimeSpan`, because a "month" is a variable unit of measure. You'll have to calculate it yourself, and you'll have to figure out how exactly you want it to work.

For example, should dates like `July 5, 2009` and `August 4, 2009` yield one month or zero months difference? If you say it should yield one, then what about `July 31, 2009` and `August 1, 2009`? Is that a month? Is it simply the difference of the `Month` values for the dates, or is it more related to an actual span of time? The logic for determining all of these rules is non-trivial, so you'll have to determine your own and implement the appropriate algorithm.

If all you want is simply a difference in the months--completely disregarding the date values--then you can use this:

public static int MonthDifference(this DateTime lValue, DateTime rValue)
{
    return (lValue.Month - rValue.Month) + 12 * (lValue.Year - rValue.Year);
}

Note that this returns a relative difference, meaning that if `rValue` is greater than `lValue`, then the return value will be negative. If you want an absolute difference, you can use this:

public static int MonthDifference(this DateTime lValue, DateTime rValue)
{
    return Math.Abs((lValue.Month - rValue.Month) + 12 * (lValue.Year - rValue.Year));
}

Problem

In C#/.NET `TimeSpan` has `TotalDays`, `TotalMinutes`, etc. but I can't figure out a formula for total months difference. Variable days per month and leap years keep throwing me off. How can I get `TotalMonths`? Edit Sorry for not being more clear: I know I can't actually get this from `TimeSpan` but I thought using `TotalDays` and `TotalMinutes` would be a good example to express what I was looking for ... except I'm trying to get Total Months. Example: Dec 25, 2009 - Oct 6, 2009 = 2 TotalMonths. Oct 6th to Nov 5th equals 0 months. On Nov 6th, 1 month. On Dec 6th, 2 months

Original source

Related problems