验证多个时间段区间是否有重合

Posted 我却醉的像条狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证多个时间段区间是否有重合相关的知识,希望对你有一定的参考价值。

<?php

/**
 * 时间段重合判断
 * @param array $data 日期数组
 * @param string $fieldStart 开始日期字段名
 * @param string $fieldEnd 结束日期字段名
 * @return bool true为重合,false为不重合
 */
function is_time_cross(array $data, string $fieldStart = ‘start_day‘, string $fieldEnd = ‘end_day‘)
{
    // 按开始日期排序
    array_multisort(
        array_column($data, $fieldStart),
        SORT_ASC,
        $data
    );

    // 冒泡判断是否满足时间段重合的条件
    $num = count($data);
    for ($i = 1; $i < $num; $i++) {
        $pre = $data[$i-1];
        $current = $data[$i];
        if (strtotime($pre[$fieldStart]) <= strtotime($current[$fieldEnd]) && strtotime($current[$fieldStart]) <= strtotime($pre[$fieldEnd])) {
            return true;
        }
    }

    return false;
}

// 测试例子
$data = [
    [‘start_day‘ => ‘2019-01-01‘, ‘end_day‘ => ‘2019-01-31‘],
    [‘start_day‘ => ‘2018-01-01‘, ‘end_day‘ => ‘2018-01-31‘],
    [‘start_day‘ => ‘2019-03-01‘, ‘end_day‘ => ‘2019-05-31‘],
    [‘start_day‘ => ‘2019-10-01‘, ‘end_day‘ => ‘2019-10-31‘],
    [‘start_day‘ => ‘2019-04-01‘, ‘end_day‘ => ‘2019-04-10‘],
];
var_dump(is_time_cross($data));


转自https://segmentfault.com/a/1190000020487996 侵删

以上是关于验证多个时间段区间是否有重合的主要内容,如果未能解决你的问题,请参考以下文章

《编程之美》区间重合判断的一些思考

是否有在单个活动中处理多个片段的 Android 设计模式?

检查panda数据帧中的多个列是否重合并在新列中标记它们

编程之美区间重合判断

1133 不重叠的线段 (贪心算法,最大区间不重合问题)

Java日期时间API系列37-----时间段是否有重叠(交集)的计算方法