`
shuaikai.shuai
  • 浏览: 4664 次
  • 性别: Icon_minigender_1
  • 来自: 株洲
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何判断两个日期区间是否重叠

 
阅读更多

问题:

假设有两个日期区间(StartDate, EndDate),其中,日期区间的开始时间与结束时间均可以为空。如果开始时间为空,则表示接近无限小;如果结束时间为空,则表示接近无线大。如何判断这两个日期区间是否发生重叠?

 

JS实现:

var a = {
    startDate : '',
    endDate : ''
}
var b = {
    startDate : '',
    endDate : ''
}

function isOverlapDate(dateRange_a, dateRange_b) {
    var a_startDate = dateRange_a.startDate == '' ? null : new Date(dateRange_a.startDate);
    var a_endDate = dateRange_a.endDate == '' ? null : new Date(dateRange_a.endDate);
    var b_startDate = dateRange_b.startDate == '' ? null : new Date(dateRange_b.startDate);
    var b_endDate = dateRange_b.endDate == '' ? null : new Date(dateRange_b.endDate);
    
    // A或者B的Start Date和End Date都为null,意味着A和B的日期接近无限小到无限大,则总会与另外一个日期区间重叠
    if ((!a_startDate && !a_endDate) || (!b_startDate && !b_endDate)) {
        return true;
    }
    // 如果能够往下走,则意味着A或者B的某一个日期不为null
    if (!a_startDate) {
        // 若A的Start Date为空,意味着End Date一定不为空
        // 在这种情况下,日期重叠有两种情况:
        // 1. B的Start Date为null
        // 2. B的Start Date不为null,A的End Date在B的Start Date之后
        return !b_startDate || a_endDate >= b_startDate;
    }
    if (!a_endDate) {
        // 若A的End Date为空,意味着Start Date一定不为空
        // 在这种情况下,日期重叠有两种情况:
        // 1. B的End Date为null
        // 2. B的End Date不为null,A的Start Date在B的End Date之前
        return !b_endDate || a_startDate <= b_endDate;
    }
    // 能够往下走,则意味着A的Start Date和End Date肯定都不为null
    if (!b_startDate) {
        // 若B的Start Date为空,意味着End Date一定不为空
        // 只要A的Start Date在B的End Date之前,两个日期一定重叠
        return a_startDate <= b_endDate;
    }
    if (!b_endDate) {
        // 若B的End Date为空,意味着Start Date一定不为空
        // 只要A的End Date在B的Start Date之后,两个日期一定重叠
        return a_endDate >= b_startDate;
    }
    // 能够往下走,则意味着A和B的Start Date和End Date肯定都不为null
    return !(a_endDate < b_startDate || b_endDate < a_startDate);
}

console.log(a, b);

 

分享到:
评论

相关推荐

    java 判断两个时间段是否重叠的案例.docx

    "java 判断两个时间段是否重叠的案例" 本文主要介绍了如何在 Java 中判断两个时间段是否重叠的案例。时间段是指具有起始时间和终止时间的时间范围,在实际开发中,我们经常需要判断两个时间段是否存在重叠的情况。...

    java 判断两个时间段是否重叠的案例

    Java 判断两个时间段是否重叠的案例 在 Java 中,判断两个时间段是否重叠是一种常见的需求,特别是在业务逻辑中需要检查时间段的交叉情况时。在本文中,我们将介绍如何使用 Java 判断两个时间段是否重叠,并提供...

    表单校验时间段重叠问题

    有个统计时段的字段,需排除选择的时间范围不能与已有时间段重叠

    C# 判断时间段是否相交的实现方法

    C# 判断时间段是否相交的实现方法是判断两个时间段是否有交集的实现方法。该方法可以应用于各种需要判断时间段是否相交的场景,例如判断某个事件是否发生在某个时间段内、判断某个任务是否在某个时间段内完成等。 ...

    PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)

    此外,文中还提到了一些在线日期和时间相关的工具,这些工具可以帮助开发者快速进行日期和时间的计算,比如在线日期/天数计算器,可以方便地计算两个日期之间的天数差异,对于开发和调试工作非常有帮助。 总的来说...

    java处理日期合并

    - 如果当前时间段的开始时间大于栈顶的结束时间,则说明这两个时间段没有重叠,此时将当前时间段的开始时间和结束时间入栈。 - 如果当前时间段的结束时间大于等于栈顶的结束时间,则说明有部分重叠,更新栈顶的结束...

    Oracle时间区间段合并.pdf

    如果满足条件,则设置`F`为0,表示这两个区间段是连接的;否则,设置`F`为1,表示它们不连接。 ```sql CASE WHEN MAX(END_TIM) OVER (PARTITION BY ID ORDER BY BEG_TIM ROWS BETWEEN UNBOUNDED PRECEDING AND 1 ...

    Python库 | datetime-interval-0.1.tar.gz

    `datetime`类结合了日期和时间,而`timedelta`类则表示两个日期或时间之间的时间差。然而,`datetime`模块默认并不直接支持时间间隔的复杂操作,比如重叠、合并、相减等,这就催生了`datetime-interval`这样的第三方...

    PHP 计算两个时间段之间交集的天数示例

    在上述条件判断中,`$this-&gt;diffBetweenTwoDays()`函数用于计算两个日期之间的天数差。这个函数没有显示在提供的代码中,但通常它会接收两个时间戳参数,并返回它们之间相差的天数。实现方法可以是: ```php ...

    Java时间工具包 JTimepiece

    5. **日期时间的区间操作**:JTimepiece可以处理日期时间的区间,如计算两个日期区间是否有重叠,或者找出一系列区间内的特定日期等。 6. **线程安全**:JTimepiece设计上考虑了多线程环境,许多类和方法都是线程...

    尚硅谷大数据技术之Hive-04(面试题)1

    这个问题涉及到日期区间重叠的计算。可以使用自连接来找出品牌的打折期间是否有重叠,然后排除重复的天数。首先,对每个品牌的打折开始日期和结束日期进行排序,接着通过自连接找出所有可能的日期重叠,然后使用条件...

    用于 .NET 的时段库,适用于时间处理场景开发

    2. **时段的比较**:判断两个时段是否重叠,或者一个时段是否包含另一个时段。 3. **时段的运算**:合并两个时段,或者从中扣除另一个时段,得到新的时间段。 4. **时段的查询**:找出一段时间内特定时刻或时间段...

    joda-2.5.jar

    例如,通过`Interval`类,可以轻松地创建并操作时间区间,判断两个日期时间之间是否重叠或相隔多长时间。而`Period`和`Duration`类则分别用于表示不同时制下的时间段,如年、月、日和小时、分钟、秒。 此外,Joda-...

    php-intervaltree:Interval Tree 数据结构的 PHP 实现

    这通常涉及到定义起始和结束值,以及提供比较方法以判断两个区间是否重叠或相邻。 对于日期时间区间,情况会稍微复杂一些。你需要处理日期和时间的表示,包括时间戳或者DateTime对象,并实现相应的比较逻辑。日期...

    前端项目-moment-range.zip

    在 "moment-range" 库中,你可以创建一个日期范围,例如 `moment.range('2022-01-01', '2022-12-31')`,然后进行各种操作,如检查某个日期是否在这个范围内,或者计算两个日期范围的重叠部分。此外,它还支持对日期...

    时间序列1

    时间区间(Interval)和区间算术涉及对时间段的操作,如计算两个时间区间的重叠。`to_period`和`to_timestamp`方法可以实现时间戳和区间之间的转换。`resample`函数用于重新采样时间序列,支持向上和向下采样。它...

    开源项目-senseyeio-spaniel.zip

    `Span`对象可以很容易地与其他`Span`进行交互,例如通过`Intersect`方法检查两个时间跨度是否有重叠,或者使用`Union`方法合并两个时间段。此外,`Before`、`After`和`Contains`等方法允许开发者快速判断时间关系。 ...

    比较时间段一与时间段二是否有交集的php函数

    在程序设计中,判断两个时间段是否有交集是一个基础且实用的功能,尤其是在需要处理日程安排、时间表等应用场景时。PHP作为一种广泛应用于Web开发的脚本语言,它提供了多种方法来实现这一功能。本文将介绍一个PHP...

    PyPI 官网下载 | date_assistant-0.6.0-py3-none-any.whl

    2. 日期计算:添加或减去天数、月份或年份,获取两个日期之间的差值。 3. 时间区间操作:处理时间段,例如计算重叠或相交的区间。 4. 时区转换:支持不同时区之间的日期和时间转换。 5. 与Unix时间戳的相互转换:...

    22第22章 时态数据库.pdf

    在时态数据库中,可能需要针对时间维度添加特定的约束,比如确保时间区间不重叠、日期序列正确等。 还有“JOIN”操作,它用于将来自两个或多个表中的行按一定规则关联起来,这在处理时态数据时也很常见。例如,可能...

Global site tag (gtag.js) - Google Analytics