Laravel 8+Inertia.js中created_at转Zulu格式的原因及解决方法
Laravel 8 + Inertia.js 时间戳前端变Zulu格式的原因与解决办法
原因
Laravel Eloquent模型的created_at/updated_at字段本质是Carbon日期实例,后端打印时看到的YYYY-mm-dd H:i:s是Carbon默认的字符串输出格式,但当Inertia将数据序列化传递给前端时,Carbon对象会遵循Laravel的默认序列化规则,被转换成ISO 8601标准格式(也就是带T和Z的Zulu时间格式),这就是前端拿到的格式和后端打印不一致的核心原因。
解决办法
方法一:全局修改模型日期序列化格式(推荐)
在User模型中重写serializeDate方法,统一指定日期字段的序列化格式,这样所有日期字段传给前端时都会是你想要的格式:
protected function serializeDate(\DateTimeInterface $date) { return $date->format('Y-m-d H:i:s'); }
方法二:单独处理单个字段
如果只需要修改某个请求里的日期格式,可以在控制器/路由中手动格式化字段后再返回:
Route::get('/test', function () { $user = User::first(); // 直接覆盖字段值为格式化后的字符串 $user->created_at = $user->created_at->format('Y-m-d H:i:s'); return Inertia::render('Test', compact('user')); });
方法三:前端格式化(你当前的方案)
你现在用的前端转换代码是可行的,但如果后端统一处理的话,能减少前端的重复代码:
{{ new Date(user.created_at).toISOString().slice(0, 19).replace('T', ' ')}}
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

