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

时间:2018-01-25 13:36:44

标签: excel excel-formula google-sheets

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

以下是一个例子:

          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 个答案:

答案 0 :(得分: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).

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

答案 1 :(得分:0)

您可以有条件地添加一个停留期延长的月份。这将使该时期具有包容性,而不是简单的减法。

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