无法修改Bootstrap模板自带日期选择器格式 适配Laravel后端SQL存储
解决方案
一、前端问题修复(解决配置不生效、日期选择器消失问题)
- 先修正
datepicker.js的错误代码:你之前写的moment.format('YYYY-MM-DD')是非法调用,会触发JS异常导致后续脚本中断,这是清缓存后日期选择器不显示的核心原因,改成直接赋值格式字符串即可:
this.locale = { format: 'YYYY-MM-DD' }
- 你对
global.js的两处修改(初始化配置的locale.format、apply.daterangepicker事件里的picker.startDate.format参数)是正确的,额外检查页面是否有内联的.js-datepicker初始化代码,内联代码优先级高于外部JS文件,会覆盖你的配置。 - 修改完成后同时清理浏览器缓存和Laravel的视图/资源缓存,执行命令:
php artisan view:clear php artisan cache:clear
避免旧的缓存内容影响配置生效。
二、后端兜底兼容方案(优先保障功能可用)
- 首先修复修改器不生效的问题:Laravel修改器命名需要和字段名对应,你的字段是
date_of_birth,所以修改器名称应为setDateOfBirthAttribute,你之前的命名setBirthDateAttribute不符合规范所以不会触发,修改后同时兼容两种日期格式:
public function setDateOfBirthAttribute($value) { $date = str_contains($value, '/') ? \Carbon\Carbon::createFromFormat('d/m/Y', $value) : \Carbon\Carbon::parse($value); $this->attributes['date_of_birth'] = $date->format('Y-m-d'); }
- 调整控制器的验证规则,将固定格式校验
dateformat:d/m/Y改为通用日期校验date,可以自动识别绝大多数合法日期格式:
public function store(){ $validated = request()->validate([ 'date_of_birth' => ['required', 'date'], 'gender' => ['required'], 'email' => ['required', 'email', 'max:255', 'unique:users'], 'contact_number' => ['required', 'digits:11'], 'password' => ['string',\Illuminate\Validation\Rules\Password::min(8)], ]); $attributes = array_merge($validated, [ 'user_type_id' => 3, ]); $newUser = \App\Models\User::create($attributes); return redirect('/'); }
完成上述修改后,即使前端暂时没有完全调整到位,后端也可以正常处理两种格式的日期,不会触发数据库报错。
内容的提问来源于stack exchange,提问作者ellajhonm
相关产品推荐
相关产品推荐

