在C1输入=IF((YEAR(A1)=YEAR(B1))(MONTH(A1)=MONTH(B1)),0,(YEAR(B1)-YEAR(A1))12+MONTH(B1)+IF(DAY(B1)-15>0,1,05)-(MONTH(A1)+IF(DAY(A1)-15>0,1,05)))+05
为了让你好理解,将公式拆解为如下:=IF(X,0,Y)如果条件X成立,返回0,否则返回Y
其中X为(YEAR(A1)=YEAR(B1))(MONTH(A1)=MONTH(B1))意思是如果A1的年份和B1的相同且A1的月份和B1的月份相同每个等式会返回TRUE(真)后者FALSE(假),真真为真,其他情况为假。
Y为(YEAR(B1)-YEAR(A1))12+MONTH(B1)+IF(DAY(B1)-15>0,1,05)-(MONTH(A1)+IF(DAY(A1)-15>0,1,05))+05简化为P-Q+05P为(YEAR(B1)-YEAR(A1))12+MONTH(B1)+IF(DAY(B1)-15>0,1,05)Q为MONTH(A1)+IF(DAY(A1)-15>0,1,05)意思把A1、B1分别转化为两个小数,整数部分代表月,小数部分代表半个月。
Q好理解:A1的月份加上,如果A1的日比15大就是1,小于等于15为05。
P一样,只是考虑了年的影响:(YEAR(B1)-YEAR(A1))12,即年份的差乘以12(1年12个月)
最后一个05是因为你要求连“皮”计算(比如1号到2号是几天,有人认为是1,有人认为是2-1+1共2天)。
如果要计算的月份需要精确到小数,那么可以如图所示的方法计,两个日期相减的结果为相差的天数,再除以30,即为相差的月份。
2如果只需要计算相差的月份,那么可以使用month()函数,如图所示。
import javaioBufferedReader;
import javaioIOException;
import javaioInputStreamReader;
public class test21 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(Systemin));
Systemoutprintln("输入第一个年份");
int yearFirst = IntegerparseInt(brreadLine());
Systemoutprint("输入第一个月份");
int monthFirst=IntegerparseInt(brreadLine());
Systemoutprintln("输入第二个年份");
int yearSecond = IntegerparseInt(brreadLine());
Systemoutprint("输入第二个月份");
int monthSecond=IntegerparseInt(brreadLine());
int monthsub = (yearFirst-yearSecond)12+(monthFirst-monthSecond);
Systemoutprintln("相差的月份"+monthsub);
}
}
你好,原因是由于detedif()函数默认计算的月是包含天数的,即你这边输入的两个日期实际上月差的结果的确是4个月。
如果你需要得到的结果是月差5,即默认起始日期的日小于结束日期,因此可以再前置位置增加一个判断语句if()
假设A1位置是2016-12-29,B1位置是2017-05-26,你需要获得这个结果则输入以下公式:
=IF(DAY(A1)>DAY(B1),1,0)+DATEDIF(A1,B1,"YM")
这样就可以得到月差是5了,如果结果是一个日期,那么只需要调整一下格式就行。
以上就是关于怎样用Excel计算2个日期之间相差的月数全部的内容,包括:怎样用Excel计算2个日期之间相差的月数、Excel 怎样才能计算相差的月份、在java中计算月份差等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)