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

Laravel 9日期格式修改及Call to a member function dateFormat()错误解决

问题修复:Call to a member function dateFormat() on string

错误原因

$req->input('StartOn')获取到的是字符串类型,而dateFormat()是Carbon日期实例的专属方法,直接调用会触发类型错误。


修复方案一:手动用Carbon转换日期格式

直接将请求中的日期字符串转为Carbon实例,再格式化为你需要的Y-m-d(四位年-月-日)格式:

修改控制器中的对应代码:

// 替换原来的$collection->StartOn = ...这一行
$collection->StartOn = \Carbon\Carbon::parse($req->input('StartOn'))->format('Y-m-d');

如果请求传入的日期格式是非标准格式(比如dd/mm/yyyy),可以指定解析格式:

// 示例:假设输入是"06/12/2022"
$collection->StartOn = \Carbon\Carbon::createFromFormat('d/m/Y', $req->input('StartOn'))->format('Y-m-d');

修复方案二:利用Laravel模型自动处理日期

让Laravel自动完成日期字符串与Carbon实例的转换,同时统一数据库存储格式:

  1. 修改Collection.php模型,添加日期字段声明并修正$dateFormat(原yy-mm-dd是两位年,改为Y-m-d匹配你要的四位年格式):
class Collection extends Model
{
    use HasFactory;
    protected $table = 'Collection';
    protected $primaryKey = 'IDCollection';
    protected $guarded = [];
    // 修正为四位年的日期格式
    protected $dateFormat = 'Y-m-d';
    public $timestamps = false;
    // 指定需要自动处理的日期字段
    protected $dates = ['StartOn', 'EndOn'];
}
  1. 控制器中直接赋值即可,无需手动调用格式方法:
$collection->StartOn = $req->input('StartOn');

Laravel会自动将请求中的日期字符串解析为Carbon实例,再按模型指定的$dateFormat存入数据库。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:45:35