PHP Carbon如何实现包含起止日期的闭区间日期间隔判断
问题原因说明
Carbon 原生的 between() 方法默认就是闭区间逻辑,自带包含起止两端的能力,你测试返回false是参数配置错误导致的:你当前测试代码里的区间起始值为2021-09-29 08:00:00,而你赋值的$now是当日0点,时间早于区间起始值,自然返回false,和方法本身的区间逻辑无关。
适配需求的实现方案
1. 标准闭区间写法
直接传入你实际需要的区间起止值即可,between()第三个参数默认值为true,代表启用闭区间规则,不需要额外修改:
// 待校验的日期,比如你举例的2021-09-29 08:00:00 $checkDate = Carbon::parse('2021-09-29 08:00:00'); // 校验是否在2021-09-29 00:00:00 ~ 2021-10-05 23:59:59闭区间内 $isInRange = $checkDate->between('2021-09-29 00:00:00', '2021-10-05 23:59:59'); // 输出结果为 true var_dump($isInRange);
2. 低版本兼容写法
如果使用的Carbon版本较老,担心默认参数不一致,可以显式传入第三个参数true,强制指定使用闭区间判断:
$isInRange = $checkDate->between('2021-09-29 00:00:00', '2021-10-05 23:59:59', true);
3. 仅校验日期忽略时间的简化写法
如果你的需求不需要判断时分秒,只需要校验日期属于区间内的自然日,可以使用betweenDate()方法,自动忽略时间部分,默认按自然日闭区间判断:
// 只要日期在2021-09-29到2021-10-05之间,任意时间都会返回true $isInDateRange = $checkDate->betweenDate('2021-09-29', '2021-10-05');
内容的提问来源于stack exchange,提问作者Toksti Dats Ready
相关产品推荐
相关产品推荐

