如何从Laravel返回的created_at字段中提取仅日期部分?
如何从Laravel返回的created_at中提取日期部分
我使用phpMyAdmin作为数据库,通过Laravel控制器获取数据,需要从created_at字段仅提取日期部分(例如得到2022-01-24,而非2022-01-24T18:30:00.000000Z)。
我的路由配置(web.php):
Route::get('/fetch/curriculumVitaes', [App\Http\Controllers\Admin\CurriculumVitaesController::class, 'index']);
控制器的index方法:
public function index() { $curriculumVitaes = CurriculumVitaes::where('deleted', '=', '0')->get(); return $curriculumVitaes; }
前端Vue渲染代码:
<tr v-for="(curriculumVitae, index) in curriculumVitaes" :key="index"> <td class="text-center">{{ index + 1 }}</td> <td class="text-center">{{ curriculumVitae.created_at }}</td> </tr>
以下是几种解决方法:
一、后端Laravel处理
1. 查询时直接格式化日期
通过selectRaw在数据库层面格式化,返回一个新的日期字段:
public function index() { $curriculumVitaes = CurriculumVitaes::where('deleted', '=', '0') ->selectRaw('*, DATE(created_at) as created_date') ->get(); return $curriculumVitaes; }
前端渲染时改用created_date:
<td class="text-center">{{ curriculumVitae.created_date }}</td>
2. 遍历集合格式化
获取数据后,遍历集合修改created_at的格式:
public function index() { $curriculumVitaes = CurriculumVitaes::where('deleted', '=', '0')->get() ->map(function($item) { $item->created_at = $item->created_at->format('Y-m-d'); return $item; }); return $curriculumVitaes; }
前端无需修改,直接使用原字段即可。
3. 模型全局配置日期格式
在CurriculumVitaes模型中定义日期序列化规则,所有返回的日期字段都会自动格式化:
protected function serializeDate(\DateTimeInterface $date) { return $date->format('Y-m-d'); }
这种方式一劳永逸,所有该模型的日期字段返回时都会是Y-m-d格式。
二、前端Vue.js处理
如果不想改动后端,直接在前端处理日期:
1. 模板内直接处理
利用原生JS的Date对象拆分日期:
<tr v-for="(curriculumVitae, index) in curriculumVitaes" :key="index"> <td class="text-center">{{ index + 1 }}</td> <td class="text-center">{{ new Date(curriculumVitae.created_at).toISOString().split('T')[0] }}</td> </tr>
2. 使用Vue过滤器
定义一个全局或局部过滤器,复用日期格式化逻辑:
// 在Vue实例中添加 filters: { formatDate(dateStr) { const date = new Date(dateStr); return date.toISOString().split('T')[0]; } }
模板中使用过滤器:
<td class="text-center">{{ curriculumVitae.created_at | formatDate }}</td>
内容的提问来源于stack exchange,提问作者SrihariSangeeth
相关产品推荐
相关产品推荐

