如何用PHP Carbon判断事件日期区间是否落在指定范围内?
用PHP和Carbon判断事件日期区间是否与指定区间重叠
给定事件的起止日期和一个检查区间,要判断事件是否处于该检查范围内(即两者存在日期重叠),可以借助Carbon的日期比较方法快速实现。
核心逻辑
两个日期区间存在重叠的判定规则:事件的结束日期不早于检查区间的开始日期,且事件的开始日期不晚于检查区间的结束日期。反之,如果事件完全在检查区间之前(事件结束早于区间开始)或完全在之后(事件开始晚于区间结束),则无重叠。
代码实现
use Carbon\Carbon; // 定义日期字符串 $eventStart = '2023-04-01'; $eventEnd = '2023-09-14'; $rangeStart = '2023-07-01'; $rangeEnd = '2023-07-31'; // 转换为Carbon日期实例 $eventStartCarbon = Carbon::parse($eventStart); $eventEndCarbon = Carbon::parse($eventEnd); $rangeStartCarbon = Carbon::parse($rangeStart); $rangeEndCarbon = Carbon::parse($rangeEnd); // 判断是否存在重叠(即事件处于检查范围内) $isInRange = !$eventEndCarbon->lt($rangeStartCarbon) && !$eventStartCarbon->gt($rangeEndCarbon); // 输出结果 var_dump($isInRange); // 示例场景下返回 bool(true)
方法说明
lt():Carbon实例的less than方法,判断当前日期是否早于目标日期gt():Carbon实例的greater than方法,判断当前日期是否晚于目标日期
额外场景:判断事件完全落在区间内
如果需要严格判定事件的起止日期都在检查区间内(而非部分重叠),可以修改判断条件:
$isFullyInRange = $eventStartCarbon->gte($rangeStartCarbon) && $eventEndCarbon->lte($rangeEndCarbon);
内容的提问来源于stack exchange,提问作者Dwight K. Shrute
相关产品推荐
相关产品推荐

