给定两个日期之间的天数,将每月的天数视为固定的30天

时间:2018-05-26 12:13:29

标签: excel date

我需要计算两个日期之间的差异,每月固定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中建议如何进行。感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

我已将公式分解为三个组件,如示例所示: screen shot

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)