循环中使用DateAdd函数无法增加日期天数问题排查
日期增加天数失败,求排查错误
我尝试了多种示例,但始终无法为日期增加天数。请问我哪里操作出错了?
$DateForQuery = date('Y-m-d',strtotime($_POST['fromdate'])); echo $DateForQuery; echo "<br>"; for($x = 1; $x <= $days; $x++) { $NewDateForQuery = date_add($DateForQuery, new DateInterval("P5D")); echo $x; echo "<br>"; echo $NewDateForQuery; }
输出结果:
错误原因及修正方案
核心问题
date_add() 函数要求第一个参数必须是 DateTime 对象,但你通过 date() 生成的 $DateForQuery 是字符串类型,类型不匹配导致函数调用失败,这就是报错的直接原因。
另外,即便使用 DateTime 对象,如果直接修改原对象,循环中每次都会在上一次修改后的日期上继续累加,可能不符合你的预期(比如想每次都基于原始日期加5天,而非逐次叠加)。
修正后的代码
// 将POST接收的日期转换为DateTime对象,这是正确操作日期的基础 $originalDate = new DateTime($_POST['fromdate']); // 输出原始日期(可选) echo $originalDate->format('Y-m-d') . "<br>"; for($x = 1; $x <= $days; $x++) { // 克隆原始日期对象,避免修改原对象导致后续循环逻辑偏离 $newDate = clone $originalDate; // 为克隆后的对象增加5天(可根据需求修改天数,比如改成P{$x}D实现每次加x天) $newDate->add(new DateInterval("P5D")); echo $x . "<br>"; // 格式化输出新日期 echo $newDate->format('Y-m-d') . "<br>"; }
额外说明
如果你需要在循环中逐次累加天数(比如第一天加5天,第二天在第一天的基础上再加5天),可以去掉克隆步骤,直接修改原对象:
$currentDate = new DateTime($_POST['fromdate']); echo $currentDate->format('Y-m-d') . "<br>"; for($x = 1; $x <= $days; $x++) { $currentDate->add(new DateInterval("P5D")); echo $x . "<br>"; echo $currentDate->format('Y-m-d') . "<br>"; }
内容的提问来源于stack exchange,提问作者Wilest
相关产品推荐
相关产品推荐

