php之 校验多个时间段是否重复

参考网址 https://www.kancloud.cn/xiaobaoxuetp/mywork/3069416
https://segmentfault.com/a/1190000020487996

PHP判断多个时间段是否存在跨天或重复叠加的场景

/**
 * PHP计算两个时间段是否有交集(边界重叠不算)
 *
 * @param string $beginTime1 开始时间1
 * @param string $endTime1 结束时间1
 * @param string $beginTime2 开始时间2
 * @param string $endTime2 结束时间2
 * @return bool
*/
function is_time_cross($beginTime1 = '', $endTime1 = '', $beginTime2 = '', $endTime2 = '') {
  $status = $beginTime2 - $beginTime1;
  if ($status > 0) {
    $status2 = $beginTime2 - $endTime1;
    if ($status2 >= 0) {
      return false;
    } else {
      return true;
    }
  } else {
    $status2 = $endTime2 - $beginTime1;
    if ($status2 > 0) {
      return true;
    } else {
      return false;
    }
  }
}
$list = array(
    array('start_s'=>'10:00', 'end_s'=>'12:30'),
    array('start_s'=>'11:00', 'end_s'=>'12:30'),
    array('start_s'=>'14:00', 'end_s'=>'12:30'),
    array('start_s'=>'16:00', 'end_s'=>'12:30'),
);
$array = array();
foreach ($list as $k => $v) {
    // 时间转换成秒
    $start = explode(':', $v['start_s']);
    $end = explode(':', $v['end_s']);
    $start_time = $start[0]*3600+$start[1]*60;
    $end_time = $end[0]*3600+$end[1]*60;
    // 更新进新列表
    $array[] = array(
        'start_s'=>$start_time, 
        'end_s'=>$end_time, 
    );
    // 先判断有没有跨天
    if ($v['start_s'] > $v['end_s']) {
        $str = '存在跨天时间段:';
        $str .= '开始时间:'.$v['start_s'];
        $str .= ' 结束时间:'.$v['end_s'];
        die($str);
    }
}
// 判断天数重叠
foreach ($array as $k => $v) {
    foreach ($array as $kk => $vv) {
        if ($kk != $k) {
            // 存在跨天时间段
            if (is_time_cross($v['start_s'], $v['end_s'], $vv['start_s'], $vv['end_s'])) {
                $str = '存在重叠时间段:';
                $str .= '开始时间:'.date('H:i', $v['start_s']);
                $str .= ' 结束时间:'.date('H:i', $v['end_s']);
                $str .= ' 《 对应 》 开始时间:'.date('H:i', $vv['start_s']);
                $str .= ' 结束时间:'.date('H:i', $vv['end_s']);
                die($str);
            }
        }
    }
}

相关推荐

  1. php 校验时间段是否重复

    2024-01-09 15:02:02       42 阅读
  2. c#检查两时间段是否重叠

    2024-01-09 15:02:02       22 阅读
  3. PHP 判断给定两时间是否在同一周,月,年

    2024-01-09 15:02:02       44 阅读
  4. Python练习列表是否存在重复元素

    2024-01-09 15:02:02       40 阅读
  5. 列表循环el-form-item并校验

    2024-01-09 15:02:02       24 阅读
  6. 实体类List重复校验

    2024-01-09 15:02:02       16 阅读
  7. mysql 字段组合查询,删除重复

    2024-01-09 15:02:02       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-09 15:02:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-09 15:02:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-09 15:02:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-09 15:02:02       20 阅读

热门阅读

  1. RabbitMQ笔记

    2024-01-09 15:02:02       32 阅读
  2. 安全认证 | CISP证书学习需要多长时间?

    2024-01-09 15:02:02       37 阅读
  3. 55. 跳跃游戏

    2024-01-09 15:02:02       33 阅读
  4. Linux磁盘空间与文件大小查看命令详解

    2024-01-09 15:02:02       31 阅读
  5. 亚马逊API:如何高效获取全球商品详情的指南!

    2024-01-09 15:02:02       44 阅读
  6. eureka工作原理

    2024-01-09 15:02:02       31 阅读
  7. 【深入理解 ByteBuf 之二】对象池设计模式概述

    2024-01-09 15:02:02       36 阅读
  8. 第五讲_css元素显示模式

    2024-01-09 15:02:02       37 阅读