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

在PHP中如何遍历两个指定日期之间的所有日期?

错误原因

  • 你代码中的date()函数用法不符合规范:date()第一个参数必须是日期格式字符串,第二个才是可选的时间戳参数,直接传入日期字符串作为第一个参数无法得到正确的时间结果。
  • 直接对日期格式的字符串执行++自增运算时,PHP只会识别字符串末尾的年份数值做自增,因此输出结果只会逐年+1,无法实现按天递增的效果。

正确实现方案

方案1:使用DateTime类(推荐,PHP 5.3及以上版本支持)

通过内置的日期处理类实现,自动处理闰年、不同月份天数差异等边界问题,不会出现解析错误:

// 明确指定输入的日期格式为日/月/年,避免解析歧义
$startDate = DateTime::createFromFormat('d/m/Y', '01/01/2017');
$endDate = DateTime::createFromFormat('d/m/Y', '01/06/2017');
// 若需要包含结束日期,需要将结束日期向后偏移1天
$endDate->modify('+1 day');

// 按天遍历的间隔规则
$interval = new DateInterval('P1D');
$dateRange = new DatePeriod($startDate, $interval, $endDate);

foreach ($dateRange as $currentDate) {
    // 输出要求的dd/mm/yyyy格式
    echo $currentDate->format('d/m/Y') . "<br>";
}

方案2:使用strtotime实现(兼容低版本PHP)

如果使用的PHP版本低于5.3,可以用时间戳遍历的方式实现,需要注意日期解析的格式问题:

// strtotime解析带-分隔的dd/mm/yyyy格式不会有歧义,因此这里用-代替/作为分隔符
$startTimestamp = strtotime('01-01-2017');
$endTimestamp = strtotime('01-06-2017');

for ($current = $startTimestamp; $current <= $endTimestamp; $current = strtotime('+1 day', $current)) {
    echo date('d/m/Y', $current) . "<br>";
}

注意:strtotime()解析带/分隔的日期时会默认按月/日/年格式处理,要解析日/月/年格式的日期建议将分隔符替换为-,避免出现日期解析错误。


内容的提问来源于stack exchange,提问作者user16408295

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:48:03