此代码可让您计算两个日期Date2> Date1之间的月份差异
public int MonthDiff(DateTime Date1, DateTime Date2)
{
return Math.Abs((Date2.Month - Date1.Month) + 12 * (Date2.Year - Date1.Year));
}
在我的示例中,如果我输入Date1 =“ 01/01/2019”&Date2 =“ 31/12/2019”,它将返回11,这是错误的,应该为12。
如果我将Date1 =“ 25/01/2019”和Date =“ 31/12/2019”,也应该是12。
所以我需要按天数或什么来计算问题?
我使用了这段代码
return Math.Abs(((Date2- Date1).Days / 30) + 12 * (Date2.Year - Date1.Year));
如果Date1 =“ 01/01/2019”&Date2 =“ 31/12/2020”,则显示36个月。
答案 0 :(得分:3)
如果您想知道两个日期之间以月或年为单位的可变长度,则应使用内置的时间跨度功能,而不要自己滚动,接受一些折衷/近似。一年中的平均天数为365.2425。非leap年一个月的平均天数是30.42,or年则是30.50,或总计30.44。近似月份时,请选择这些值之一。选择在计算月/年时是舍入还是舍入以及舍入到小数位数
例如:
var a = DateTime.Now;
var b = DateTime.Now.AddDays(366);
var years = Math.Round((b-a).TotalDays/365.2425);
您可以采用其他替代方法,例如:
这些是实施非常具体的近似值的决定
在您准确解释要使用的数学规则时,我认为您的问题不会有基于事实的答案,因此可以对所有异常进行编码。说“ x-y是11个月,这是错误的”,这不是规则;您需要说出为什么错了