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

Laravel中计算当前日期与任务截止日期天数差的问题排查

解决date_diff()类型错误:传入DateTimeInterface对象而非字符串

你遇到的date_diff(): Argument #1 ($baseObject) must be of type DateTimeInterface, string given错误,根源是第一个参数传了date("Y-m-d")返回的字符串,而该函数仅接受DateTimeInterface类型的对象(比如DateTime或Carbon实例)。

快速修复视图代码

直接把date("Y-m-d")替换为date_create()(创建当前日期的DateTime对象),同时注意date_diff返回的是DateInterval对象,要获取天数差值需调用->days属性:

<p class="flex items-center px-4 py-1 rounded-lg text-[#555]">
    {{ date_diff(date_create(), date_create($task->date_of_completion))->days }}
</p>

更优雅的Laravel方案(推荐)

Laravel自带Carbon日期库,处理日期更简洁直观,无需手动创建DateTime对象:

  1. 优化视图代码:
<p class="flex items-center px-4 py-1 rounded-lg text-[#555]">
    {{ now()->diffInDays(\Carbon\Carbon::parse($task->date_of_completion)) }}
</p>
  1. 进一步简化(模型配置):
    在Task模型中配置日期字段自动转换为Carbon实例,后续直接调用字段即可:
// app/Models/Task.php
protected $casts = [
    'date_of_completion' => 'date',
    'task_date' => 'date',
];

之后视图可以简化为:

<p class="flex items-center px-4 py-1 rounded-lg text-[#555]">
    {{ now()->diffInDays($task->date_of_completion) }}
</p>

控制器代码优化(可选)

用Carbon替换原生date函数,让代码更简洁规范:

public function saveItem(Request $request) {
    if ($request->task == null) {
        abort(404);
    }

    $newTask = new Task;
    $newTask->tasks = $request->task; 
    $newTask->is_complete = 0;
    $newTask->task_date = now()->toDateString();
    
    if($request->day === "tomorrow") {
        $newTask->date_of_completion = now()->addDay()->toDateString();
    } elseif($request->day === "today") {
        $newTask->date_of_completion = now()->toDateString();
    }
    
    $newTask->save();
    return redirect('/');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:10:36