计算两个date之间发生date范围的天数

我有一个数据表,其中包含一个任务的开始和结束date列表。 我需要计算开始date和结束date之间有多less天是我们圣诞假期的一部分(12月11日到1月7日)

因此,例如,当开始date是2012年12月10日,结束date是12/01/2013时,28天是在这些date之间。 当开始date是2012年12月15日并且结束date是12/03/2013时,那么在这些date之间有22天的日子。 如果开始date是2012年12月10日,而结束date是2014年12月1日,则有56天是在这些date之间(因为有两年的范围)。

我需要用一个公式来做这件事,因为我已经设定了要求。 最初,我决定使用圣诞节(12月25日)的次数,每次出现只计算4周。

我使用的公式是

=FLOOR((E12-A25)/365,1)+IF(OR(MONTH(E12)=12, MONTH(A25)=12), IF(AND(DAY(A25)<=25,DAY(E12)>=25),1,0), IF(OR(MONTH(A25)>=12, IF(MONTH(E12)<MONTH(A25), MONTH(E12)+12, MONTH(E12))>=12),1,0))*28 

但是,如果范围的开始和结束date落在这两个date之间,显然这没有帮助。

有什么build议么? 我处于死胡同

你在第二个例子中的datemath是错误的 – 这个范围有24天,而不是22天。

我可以在那里度过一个假期:

让:

  • A1包含假期开始(2012年12月11日)
  • A2包含假期结束(2013年1月7日)
  • B1包含开始date
  • B2包含结束date

式:

 =MAX(MIN(A2+1,B2+1),A1) - MIN(MAX(A1,B1),A2+1) 

公式基本上find重叠的date范围,如果有的话,减去得到整天的天数。 “+1”是因为你的“结束date”实际上是包容性的,所以对于datemath,你需要在1月8日结束,而不是1月7日,以捕捉最后一天。

但这只适用于一年的假期。 您可以将假期范围存储在其他单元格中,并使用相同的公式并将其全部添加,但是您将受限于您设置的多年。

该公式将计算在12月11日至1月7日之间的date,包括在任何date范围内,甚至在多年之内

=SUMPRODUCT((TEXT(ROW(INDIRECT(B1&":"&B2)),"mmdd")+0>=1211)+(TEXT(ROW(INDIRECT(B1&":"&B2)),"mmdd")+0<=107))

你的开始date是B1,结束date是B2

这将范围内的每个date转换为一个数字,例如,1月12日为1201,3月4日为304,然后计算大于或等于1207(12月7日)或小于或等于107(1月7日) ,那么最后一个例子就是56

如果您从每个date中减去7(基于1月7日作为结束date),则可以缩短公式,那么您只需检查结果数字是否大于等于1204即

=SUMPRODUCT((TEXT(ROW(INDIRECT(B1-7&":"&B2-7)),"mmdd")+0>=1204)+0)

…..第三个选项也应该给出相同的结果,更接近于理查德的方法 – 获得年数并乘以28,然后根据开始/结束date调整数字

=(YEAR(B1-7)-YEAR(B2-7)+1)*28-MAX(0,B2-DATE(YEAR(B2-7),12,11))-MIN(28,DATE(YEAR(B1-7)+1,1,7)-B1)