php - 在 laravel 中使用日期格式的正确方法
问题描述
我有一个带有 Postgres 数据库的 Laravel 项目。我对日期格式有一些问题。
这是 Laravel Blade 中的一段输入字段
<div class="form-group col-md-3">
<label for="nome" class="required">
Birth Date
</label>
<input class="form-control date" type="text"value="{{ (!empty($patient) && $patient->datebirth) ?
Carbon\Carbon::parse($patient->datebirth)->format('d/m/Y') : '' }}" name="datebirth"
id="datebirth" />
</div>
这是激活引导日期字段的脚本
$(document).ready(function() {
$('.date').datepicker({
firstDayOfWeek: 1, // The first day of week is Monday
weekDayFormat: 'narrow', // Only first letter for the weekday names
inputFormat: 'd/M/y',
outputFormat: 'd/M/y',
titleFormat: 'EEEE d MMMM y',
markup: 'bootstrap4',
theme: 'bootstrap',
modal: false
});
});
这是控制器代码
public function save(Request $req){
$validatedData = $req->validate([
'name' => ['required', 'max:255'],
'datebirth' => ['required','date'],
]);
$newPatient = new Patient;
$newPatient->name = $req->name;
$newPatient->datebirth = $req->datebirth;
$newPatient->save();
}
但是当我保存对象时,错误是:
SQLSTATE[22008]: Datetime field overflow: 7 ERROR: date/time field value out of range: "22/04/1985"...
因为数据库需要 ymd 格式,但我想在我的视图中使用 d/M/y。我更改了 outputFormat:在“y/M/d”中保存操作有效,但是当用户使用小部件(输入字段)更改日期时,它以 y/M/d 格式显示。
在控制器中,我只需获取请求的 datebirth 字段的值,将其分配给对象并保存。我想避免每次保存/编辑对象时在控制器中进行格式转换
处理这种情况的正确方法是什么?
有什么办法可以避免每次保存前都转换数据格式?
解决方案
日期输入期望属性包含value
ISO 8601YYYY-mm-dd
格式的数据。由于您正在请求日期,因此使用此输入类型是填写表单的正确方法。当作为字符串回显时,Carbon 默认会转换为 ISO 8601。
<div class="form-group col-md-3">
<label for="nome" class="required">
Birth Date
</label>
<input
type="date"
class="form-control"
value="{{ ($patient->datebirth ?? false) ? $patient->datebirth->toDateString() : '' }}"
name="datebirth"
id="datebirth"
/>
</div>
发出请求时,输入将以 ISO 8601 格式发送到服务器。但是如果你正确设置了模型,Laravel 会在保存过程中自动处理格式。例如
class Patient extends Model
{
protected $dates = [
"datebirth",
];
}
推荐阅读
- python - 在 Python 中将 db 响应转换为布尔值
- python - weasyprint 不加载烧瓶图像
- android - PagedList.Config 使用recycleview在中间加载列表
- python - 如何在 python pandas 中将数据从行转换为列?
- python - 确定分组数据框中是否发生任何更改
- ansible - ansible初始化多个windows磁盘
- ruby - Ruby - 如何将值写入 csv 文件?
- c++ - 准备发布我的第一个游戏,尝试在测试环境中运行时出现错误 0xc000007b
- llvm - 通过修改 LLVM Backend 来破坏 X86 注册
- c++ - 头指针不包含二叉树中的子节点