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

时间:2012-12-19 06:33:19

标签: excel excel-2003

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

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

由于我已经设定了要求,我需要用公式做这个。 最初我决定使用圣诞节(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

但是,如果范围开始和结束日期介于这两个日期之间,这显然无效。

有什么建议吗?我走到了尽头

2 个答案:

答案 0 :(得分:0)

第二个示例中的日期数学错误 - 该范围内有24天,而不是22天。

我可以带你到一个假期:

让:

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

式:

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

公式基本上找到重叠的日期范围(如果有),并减去获取整天的数量。 “+1”是因为你的“结束日期”实际上是包容性的,所以对于日期数学,你需要让假期在1月8日结束,而不是1月7日,以捕捉最后一天。

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

答案 1 :(得分:0)

此公式将计算12月11日至1月7日期间任何日期范围内的日期,即使是多年

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

您的开始日期为B1,结束日期为B2

这会将范围中的每个日期转换为数字,例如12月1日变为1201,3月4日变为304,然后计算那些大于或等于1207(12月7日)或小于或等于107(1月7日)的日期,因此这将为您的最后一个例子提供56

如果从每个日期减去7(基于1月7日作为结束日期),您可以缩短公式,然后您只需要检查结果数字是否> = 1204,即

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

.....和第三个选项也应该给出相同的结果,更接近richardtallent的方法 - 得到年数乘以28然后根据开始/结束日期调整数字

=(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)