You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:10:36