【问题标题】:Calculate the number of days of a date range occur between two dates计算两个日期之间发生的日期范围的天数
【发布时间】:2012-12-19 06:33:18
【问题描述】:

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

因此,例如,当开始日期为 10/12/2012 并且结束日期为 12/01/2013 时,其中 28 天在这两个日期之间。当开始日期为 2012 年 12 月 15 日且结束日期为 2013 年 3 月 12 日时,这些日期之间有 22 天。如果开始日期是 2012 年 10 月 12 日,结束日期是 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

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

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

【问题讨论】:

  • 有什么问题? 2012 年 10 月 12 日到 2014 年 12 月 12 日之间的 56 天有问题吗?
  • 不,这是正确的答案。问题是当前的公式计算不正确。该公式仅检查 12 月 25 日是否发生在两个日期之间。如果范围是 2012 年 11 月 12 日到 2012 年 12 月 23 日,它将返回 0。它应该返回 12。

标签: excel excel-2003


【解决方案1】:

您在第二个示例中的日期数学错误 - 该范围内有 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 日,才能捕捉到最后一天。

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

【讨论】:

  • 感谢richardtallent 的详细解答。这完美地回答了我的问题。
  • 我确实意识到我的问题有点不对劲。我最终使用了这个=IF(AND(B1&gt;=A1,B1&lt;=A2),28,MAX(MIN(A2+1,B2+1),A1) - MIN(MAX(A1,B1),A2+1)),因为我意识到如果开始日期在那个时期内,无论如何我都需要将所有内容移回 28 天。以为我会把这个留给其他陷入同样困境的人(或者如果我再次把这个想法弄错了,我会更正):)
【解决方案2】:

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

=SUMPRODUCT((TEXT(ROW(INDIRECT(B1&amp;":"&amp;B2)),"mmdd")+0&gt;=1211)+(TEXT(ROW(INDIRECT(B1&amp;":"&amp;B2)),"mmdd")+0&lt;=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&amp;":"&amp;B2-7)),"mmdd")+0&gt;=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)

【讨论】:

    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 2015-02-26
    • 2019-09-27
    相关资源
    最近更新 更多