zoukankan      html  css  js  c++  java
  • 验证多个时间段区间是否有重合

    <?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 侵删
  • 相关阅读:
    HashMap实现原理
    框架-Spring
    团队开发介绍
    返回一个环状整数数组中最大子数组之和
    软件工程学习体会
    书店促销
    寻找小水王
    梦断代码阅读笔记3
    找水王
    梦断代码阅读笔记2
  • 原文地址:https://www.cnblogs.com/ruoruchujian/p/11969497.html
Copyright © 2011-2022 走看看