Quantcast
Channel: Difference in months between two dates - Stack Overflow
Viewing all articles
Browse latest Browse all 46

Answer by Guillaume86 for Difference in months between two dates

$
0
0

If you want the exact number of full months, always positive (2000-01-15, 2000-02-14 returns 0), considering a full month is when you reach the same day the next month (something like the age calculation)

public static int GetMonthsBetween(DateTime from, DateTime to){    if (from > to) return GetMonthsBetween(to, from);    var monthDiff = Math.Abs((to.Year * 12 + (to.Month - 1)) - (from.Year * 12 + (from.Month - 1)));    if (from.AddMonths(monthDiff) > to || to.Day < from.Day)    {        return monthDiff - 1;    }    else    {        return monthDiff;    }}

Edit reason: the old code was not correct in some cases like :

new { From = new DateTime(1900, 8, 31), To = new DateTime(1901, 8, 30), Result = 11 },Test cases I used to test the function:var tests = new[]{    new { From = new DateTime(1900, 1, 1), To = new DateTime(1900, 1, 1), Result = 0 },    new { From = new DateTime(1900, 1, 1), To = new DateTime(1900, 1, 2), Result = 0 },    new { From = new DateTime(1900, 1, 2), To = new DateTime(1900, 1, 1), Result = 0 },    new { From = new DateTime(1900, 1, 1), To = new DateTime(1900, 2, 1), Result = 1 },    new { From = new DateTime(1900, 2, 1), To = new DateTime(1900, 1, 1), Result = 1 },    new { From = new DateTime(1900, 1, 31), To = new DateTime(1900, 2, 1), Result = 0 },    new { From = new DateTime(1900, 8, 31), To = new DateTime(1900, 9, 30), Result = 0 },    new { From = new DateTime(1900, 8, 31), To = new DateTime(1900, 10, 1), Result = 1 },    new { From = new DateTime(1900, 1, 1), To = new DateTime(1901, 1, 1), Result = 12 },    new { From = new DateTime(1900, 1, 1), To = new DateTime(1911, 1, 1), Result = 132 },    new { From = new DateTime(1900, 8, 31), To = new DateTime(1901, 8, 30), Result = 11 },};

Viewing all articles
Browse latest Browse all 46

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>