php 交集查询

mysql: 

// 时间 
$shiJianKJ = ['开始时间','结束时间'];
$query->where(function($query) use($shiJianKJ){
    // 开始时间小于查询开始时间
    // 结束时间大于查询结束时间
    $query->orWhere(function($query) use($shiJianKJ){
        $query->where('start_time', '<', $shiJianKJ[0]);
        $query->where('end_time', '>', $shiJianKJ[1]);
    });
    // 开始时间大于查询开始时间
    // 结束时间小于查询结束时间
    $query->orWhere(function($query) use($shiJianKJ){
        $query->where('start_time', '>', $shiJianKJ[0]);
        $query->where('start_time', '<', $shiJianKJ[1]);
    });
    // 结束时间大于查询开始时间
    // 结束时间小于查询结束时间
    $query->orWhere(function($query) use($shiJianKJ){
        $query->where('end_time', '>', $shiJianKJ[0]);
        $query->where('end_time', '<', $shiJianKJ[1]);
    });
});

function:

    /**
     * 验证时间是否有交集,(时间戳大小比较)
     *
     * @author Eric
     * @param $shiJianKJ 查询时间
     * @param $times 系统时间
     * @return int 1,2,3表示有交集
     */
	public function yan_zheng_shi_fou_you_jiao_ji($shiJianKJ, $times)
    {
        // 系统时间包含查询时间
        // 系统开始 <= 查询开始 && 系统结束 >= 查询结束
        if($times[0] <= $shiJianKJ[0] && $times[1] >= $shiJianKJ[1])
        {
            return 1;
        }
        // 系统开始 >= 查询开始 && 系统开始 <= 查询结束
        if($times[0] >= $shiJianKJ[0] && $times[0] <= $shiJianKJ[1])
        {
            return 2;
        }
        // 系统结束 >= 查询开始 && 系统结束 <= 查询结束
        if($times[1] >= $shiJianKJ[0] && $times[1] <= $shiJianKJ[1])
        {
            return 3;
        }
        return 4;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值