使用Carbon解析数据库created_at字段报错无法解析时间字符串如何解决
报错信息:
error: Could not parse '[{"created_at":"2021-11-20T15:14:28.000000Z"}]': DateTime::__construct(): Failed to parse time string ([{"created_at":"2021-11-20T15:14:28.000000Z"}]) at position 0 ([): Unexpected character
报错原因
你代码中使用get('created_at')获取字段值的方式有误:get()方法返回的是 Eloquent 集合对象,序列化后就是你报错中看到的JSON数组结构,而非单个created_at时间字符串,将该结构直接传入Carbon::parse()自然无法解析。
正确处理方法
分两种常见场景实现:
场景1:仅需获取匹配条件的第一条记录的created_at
直接使用value()方法提取单个字段值即可,代码如下:
// 直接提取符合条件的第一条记录的created_at字段值 $created_at = $ar->where('status', 0)->value('created_at'); // 解析后加3天再格式化 $backlog = Carbon::parse($created_at)->addDays(3)->format('y-m-d');
如果你的模型已经默认配置了日期字段(Laravel默认会将created_at、updated_at自动转为Carbon实例),可以简化写法,无需手动解析:
$record = $ar->where('status', 0)->first(); $backlog = $record->created_at->addDays(3)->format('y-m-d');
场景2:需要处理所有匹配条件的记录的created_at
遍历集合逐个处理即可:
// 获取所有符合条件的记录集合 $records = $ar->where('status', 0)->get(['created_at']); foreach ($records as $item) { $backlog = $item->created_at->addDays(3)->format('y-m-d'); // 此处编写单条记录对应的业务逻辑 }
内容的提问来源于stack exchange,提问作者My Jinji
相关产品推荐
相关产品推荐

