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
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));
}