您的公式计算receivedDate的第一个月到dueDate的第一个月之间的月数。由于TimeSpan中的大多数时间元素都表达为TotalXXX,所以他们遗漏了TotalMonths和TotalYears似乎很奇怪。
我认为这是因为每个月都没有固定的天数,所以很难知道如何表达分数余数。
我的公式是这样的......
int nMonthDiff_FirstToFirst = DateTime.Now.Month - testDate.Month + ((DateTime.Now.Year - testDate.Year)* 12);
double dMonthDiff = (double)nMonthDiff_FirstToFirst + (DateTime.Now - testDate.AddMonths(nMonthDiff_FirstToFirst)).TotalDays/(double)DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
所以我做的是基本上得到月份差像你(当月的第一天至当月的第一天),那么,什么项目我我testDate成未来按月份差异。然后用那个TimeSpan我得到TotalDays并且除以那个月的天数。因此,我以月份的剩余天数表示小数部分。
所以如果你要去2012年5月5日 - > 2012年6月3日,你的公式将返回1为月份的差异,当一整个月还没有通过。在我的公式中,预计日期的总日数会产生负数的小数天数,并且在添加到“第一个到第一个”月份的差异时,它会根据需要采用。
来源
2012-05-22 16:07:42
AJB
不明白'乐观/悲观'的东西。两个日期之间的月数是否定义为“两个日期之间有一天或多天的月数,包括”?在这种情况下,不会有一个正确的答案。 – mackenir 2009-04-20 15:45:32