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

使用vuejs-datepicker时Laravel更新数据如何正确格式化日期?

问题原因
  • 前端vuejs-datepicker默认输出ISO 8601格式的日期字符串(形如2021-07-09T12:54:00.000Z),MySQL原生datetime/date类型不支持直接存储该格式,因此触发格式错误。
  • 控制器代码存在两处逻辑错误:
    1. Request::only()用法错误,该方法仅接收字段名数组作为参数,不能直接传键值对
    2. 没有读取前端提交的新日期值,而是直接使用了数据库中已存储的旧用户日期做格式化,因此提交的新值不会被保存
修复方案

你可以任选前端或后端一端做日期格式化处理即可:

方案1:前端提交前格式化

修改edit.vue的提交方法,在调用put请求前先把日期转成数据库支持的格式:

methods: {
  update() {
    // 格式化ISO日期为Y-m-d格式(若字段为datetime类型可改为Y-m-d H:i:s格式)
    if (this.form.date_of_birth) {
      const date = new Date(this.form.date_of_birth)
      this.form.date_of_birth = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`
    }
    this.form.put(this.route('applications.update', this.application.id))
  },
},

方案2:后端接收后格式化

修正控制器代码,读取请求提交的日期值,借助Carbon做格式转换后再存入数据库:

// 解析前端提交的ISO日期,转换为数据库支持的格式
$formattedDate = \Carbon\Carbon::parse(request()->input('date_of_birth'))->format('Y-m-d');

User::find($application->user_id)->update([
  'date_of_birth' => $formattedDate
]);

补充优化

如果是Laravel项目,建议在User模型中添加日期类型转换,后续存取日期会自动处理格式:

// app/Models/User.php
protected $casts = [
    'date_of_birth' => 'date:Y-m-d', // 若为datetime类型则改为 'datetime:Y-m-d H:i:s'
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:27:00