说明
在 CSharp 中,通过将两个 DateTime 相减获得 TimeSpan,并由此获得相隔的天数、时、分、秒都十分方便,但唯独缺少获得相隔月份的方法。直接对 TimeSpan 进行计算,利用相隔天数计算月份差(每月份的天数均不同,且有闰年存在)会存在一些误差。本扩展可解决这个问题。
已知两个时间(DateTime)dt1 和 dt2,计算两者之间的月份差。
所得结果向上取整,即:
0. 如果 dt1 与 dt2 之间相差小于一个月的,算作一个月;
0. 如果 dt1 与 dt2 之间相差大于一个月且小于两个月的,算作两个月。
扩展方法代码
///
/// Compute dateTime difference
/// Alex-LEWIS, 2015-08-11
///
///
///
///
public static int GetMonthDiff(this DateTime dt1, DateTime dt2)
{
var l = dt1 < dt2 ? dt1 : dt2;
var r = dt1 >= dt2 ? dt1 : dt2;
return (l.Day == r.Day ? 0 : l.Day > r.Day ? 0 : 1)
+ (l.Month == r.Month ? 0 : r.Month - l.Month)
+ (l.Year == r.Year ? 0 : (r.Year - l.Year) * 12);
}
使用示范
DateTime dt1 = new DateTime(2015, 08, 11);
DateTime dt2 = new DateTime(1992, 10, 10);
var monthDiff = dt1.GetMonthDiff(dt2);