我需要计算两个日期之间的差异,每月固定30天逻辑。示例如下所示
1.开始日期= 10/4/2018
2.结束日期= 28/10/2018
3. = 199之间的预期天数
(天数差异的Excel计算=> 28/10/2018 - 10/4/2018 = 201这不是我需要的)
计算两个日期之间的差异的基础是,它应该将一个月中的天数视为30天而不管月份。所以在开始和之间的所有月份之间31天的结束日期应视为30天。如果介于两者之间,那么它也应该被视为30个月。
计算两个给定日期之间的天数的程序:
1.起始月份的天数= 30/4/2018 - 10/4/2018 = 21天
2.在18/18/2018至30/9/2018之间的月份= 5个月= 5 x 30 = 150天
3.上个月的天数= 28/10/2018 - 1/10/2018 = 28天
总天数= 21 + 150 + 28 = 199天。
如果A1是开始日期单元格,B1 =结束日期单元格,请在excel中建议如何进行。感谢您的帮助。
答案 0 :(得分:1)
D2:G2中的公式为:
D2: =IF(AND(YEAR(A2)=YEAR(B2),MONTH(A2)=MONTH(B2)),MIN(DATE(YEAR(A2),MONTH(A2),30),B2),DATE(YEAR(A2),MONTH(A2),30))-MIN(DATE(YEAR(A2),MONTH(A2),30),A2)+1
E2: =MAX(((YEAR(B2)-YEAR(A2))*12+MONTH(B2)-MONTH(A2)-1)*30,0)
F2: =MIN(IF(AND(YEAR(B2)=YEAR(A2),MONTH(B2)=MONTH(A2)),0,B2-DATE(YEAR(B2),MONTH(B2),1)+1),30)
G2: =SUM(D2:F2)
或者,一体化:
=IF(AND(YEAR(A2)=YEAR(B2),MONTH(A2)=MONTH(B2)),MIN(DATE(YEAR(A2),MONTH(A2),30),B2),DATE(YEAR(A2),MONTH(A2),30))-MIN(DATE(YEAR(A2),MONTH(A2),30),A2)+1+MAX(((YEAR(B2)-YEAR(A2))*12+MONTH(B2)-MONTH(A2)-1)*30,0)+MIN(IF(AND(YEAR(B2)=YEAR(A2),MONTH(B2)=MONTH(A2)),0,B2-DATE(YEAR(B2),MONTH(B2),1)+1),30)
我喜欢@Jeeped代码的优雅,但这可能更容易理解。
答案 1 :(得分:0)
试试这个,
=SUMPRODUCT(--(DAY(ROW(INDIRECT(A2&":"&B2)))<>31))+
(DAY(A2)=31)+
SIGN(SUMPRODUCT((MONTH(ROW(INDIRECT(A2&":"&B2)))=2)*(DAY(ROW(INDIRECT(A2&":"&B2)))=28)))*2
答案 2 :(得分:0)
在我看来,你的例子有点“不稳定”,就像第31个有时候(如果它是开始/结束日期)而不是其他人一样。
无论如何,这个功能并不漂亮,但它可以解决问题:
Function No31st(startDate As Date, endDate As Date) As Long
Dim d As Date
For d = startDate To endDate 'iterate each day in range
If Day(d) <= 30 Then 'count days up to the 30th
No31st = No31st + 1
'if it's Feb 28, add 2 more days
If (Month(d) = 2 And Day(d) = 28) Then
No31st = No31st + 2 ' + Feb 29 + Feb 30
If Day(d + 1) <> 1 Then d = d + 1 'leap year
End If
End If
Next d
'since the 31st counts if it's the last day:
If Day(startDate) = 31 Or Day(endDate) = 31 Then No31st = No31st + 1
End Function
StartDate endDate result
10/4/2018 28/10/2018 199
31/1/2018 31/3/2018 61
28/2/2018 1/3/2018 4
28/2/2000 1/3/2000 4
31/1/2018 1/2/2018 2
答案 3 :(得分:0)
DAYS360
公式基于12个30天的月份逻辑。
答案 4 :(得分:0)
简单方法:
(1)
=YEARFRAC(start_date,end_date,4)*360
(2)
=DAYS360(start_date,end_date)