如何用CarbonPeriod生成日期数组并判断指定日期是否存在(Laravel/PHP)
问题原因
你用Carbon\CarbonPeriod::create()得到的是CarbonPeriod实例,并非字符串数组。这个实例虽支持迭代,但内部元素是Carbon日期对象,不是你需要的'YYYY-MM-DD'格式字符串。直接用in_array('2022-11-03', $date)时,是拿字符串和Carbon对象做比较,自然匹配失败。
解决方案
有两种常用处理方式:
1. 转成日期字符串数组后判断
先把CarbonPeriod生成的Carbon对象转换为日期字符串,再用in_array判断:
$from = '2022-11-01'; $to = '2022-11-05'; // 生成日期范围并转换为字符串数组 $datePeriod = Carbon\CarbonPeriod::create($from, $to); $dateArray = []; foreach ($datePeriod as $date) { $dateArray[] = $date->toDateString(); } // 判断目标日期是否在数组中 if (in_array('2022-11-03', $dateArray)) { echo "Got it"; }
如果是Laravel环境,可通过集合简化转换:
$dateArray = collect($datePeriod)->map(fn($date) => $date->toDateString())->toArray();
2. 直接用CarbonPeriod的contains方法判断
无需转换数组,直接用CarbonPeriod内置的contains方法,传入Carbon对象即可:
$from = '2022-11-01'; $to = '2022-11-05'; $targetDate = Carbon\Carbon::parse('2022-11-03'); $datePeriod = Carbon\CarbonPeriod::create($from, $to); if ($datePeriod->contains($targetDate)) { echo "Got it"; }
内容的提问来源于stack exchange,提问作者Rajib Bin Alam
相关产品推荐
相关产品推荐

