首页 文章

Excel - 计算两个日期之间特定月份的天数

提问于
浏览
1

我有一个房屋租赁业务,我想计算入住率 . 为此,我需要计算两个日期(登记入住和退房)之间特定月份的夜晚数量 .

这是一个例子:

A          B          C         D         E        F 

1  |     IN     |   OUT    |  NIGHTS | 01/01/18 | 01/02/18 |...
   ------------------------------------------------------------
2  |  15/01/18  | 25/01/18 |   10    |  10      |  0       |...
   ------------------------------------------------------------
3  |  28/01/18  | 04/02/18 |   7     |  3       |  3       |...

以下是以下公式:

C3 = B3-A3

D3 = MAX(0; MIN(EOMONTH(D$1;0); $B3) - MAX(D$1; $A3))

我想我不是太远但公式仍然不正确 . 如您所见,D2是正确的,但D3是错误的 . 这是一个棘手的部分,当这种情况在1月和1月的2个月内重叠时 . D3应该显示4晚而不是3晚 .

有人可以帮忙吗?提前致谢!

PS:抱歉格式化,但我无法添加截图..

2 回答

  • 1

    我想你只是无条件地在一个月末添加一天 - 我需要尝试使用一两个测试用例 .

    MAX(0; MIN(EOMONTH(D$1;0)+1; $B3) - MAX(D$1; $A3))
    

    只是说明四种可能的情况 - 给定开始日期d1 / m1 / y1(A3),结束日期d2 / m2 / y2(B3),当前月份的第一天01 / mm / yy(D1)和当前的最后一天月dd / mm / yy(D1中的最后一天)

    (1) d1/m1/y1>=01/mm/yy and d2/m2/y2 <= dd/mm/yy -> d2/m2/y2 - d1/m1/y1
    (Both days in current month - all nights between the two dates)
    
    (2) d1/m1/y1 < 01/mm/yy and d2/m2/y2 <= dd/mm/yy -> d2/m2/y2 - 01/mm/yy
    (Start before current month, end in current month - all nights from 1st of month up to end date)
    
    (3) d1/m1/y1 >= 01/mm/yy and d2/m2/y2 > dd/mm/yy -> 01/(mm+1)/yy - d1/m1/y1
    (Start in current month, end after current month - all nights from start date up to 1st of following month)
    
    (4) d1/m1/y1 < 01/mm/yy and d2/m2/y2 > dd/mm/yy -> 01/(mm+1)/yy - 01/mm/yy
    (Start before current month, end after current month - all nights in month).
    

    换句话说,它计算范围内一天后的每个夜晚,但不计算该范围内一天之前的夜晚 .

  • 0

    您可以有条件地添加一天,当停留期延长到月末 . 这将使该时段包含在内而不是简单的减法 .

    =MAX(0, MIN(EOMONTH(D$1, 0), $B4)-MAX(D$1, $A4))+(EOMONTH(D$1, 0)<$B4)
    

相关问题