gpt4 book ai didi

language-agnostic - 日期范围与可空日期重叠

转载 作者:行者123 更新时间:2023-12-04 16:56:27 26 4
gpt4 key购买 nike

我正在寻找对这里提出的问题的扩展答案:

Determine Whether Two Date Ranges Overlap

其中任一日期范围内的任何日期都可以为空。我想出了以下解决方案,但我不确定是否可以进一步简化。

(StartA == NULL || StartA <= EndB) &&
(EndA == NULL || EndA >= StartB) &&
(StartB == NULL || StartB <= EndA) &&
(EndB == NULL || EndB >= StartA)

假设:

StartA 到 EndA 和 StartB 到 EndB 的日期时间范围

编辑:抱歉,我很快将上述逻辑放在一起,当范围的开始日期和结束日期为 NULL 时,这似乎失败了。有关更好且解释清楚的方法,请参阅下面的 David 解决方案。

最佳答案

这种情况可以通过 Charles Bretana's excellent answer 的轻微概括来处理。那个问题。

Let CondA Mean DateRange A Completely After DateRange B (True if StartA > EndB)Let CondB Mean DateRange A Completely Before DateRange B (True if EndA < StartB)


在这种情况下,假设您想要一个空日期来表示“没有开始/结束界限”,则修改条件。对于 CondA例如,为了使 DateRange A 完全在 DateRange B 之后,DateRange A 必须有一个定义的开始时间,DateRange B 必须有一个定义的结束时间,并且 A 的开始时间必须在 B 的结束时间之后:
CondA := (StartA != null) && (EndB != null) && (StartA > EndB)
CondB与 A 和 B 切换相同:
CondB := (StartB != null) && (EndA != null) && (StartB > EndA)
继续,

Then Overlap exists if Neither A Nor B is true

Overlap := !(CondA || CondB)

Now deMorgan's law, I think it is, says that

Not (A Or B) <=> Not A And Not B

Overlap == !CondA && !CondB
== ![(StartA != null) && (EndB != null) && (StartA > EndB)] &&
![(StartB != null) && (EndA != null) && (StartB > EndA)]
== [(StartA == null) || (EndB == null) || (StartA <= EndB)] &&
[(StartB == null) || (EndA == null) || (StartB <= EndA)]
我认为这实际上比您开发的解决方案更强大,因为如果 EndB == NULL但是 StartA不为空,您的第一个条件将比较 StartA <= NULL .在我熟悉的大多数语言中,这是一个错误条件。

关于language-agnostic - 日期范围与可空日期重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3196099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com