无效的日期时间格式:1292 不正确的日期值:'2022年8月2日' LARAVEL

3

我无法在我的项目中插入日期。有人能否请检查我的代码以找出错误?

在我的表中——

public function up()
    {
        Schema::create('basic_infos', function (Blueprint $table) {
            $table->id('EmpID');
            $table->string('Emp_Name');
            $table->date('DOB')//date of birth;
            $table->timestamps();
        });
    }

在我的Blade文件中 -
<input type="date" name="DOB"  id="date_of_birth" class="form-control datepicker form-control-md" data-bs-toggle="tooltip" title="Date of Birth">

在我的控制器中 -
 public function store(Request $request)
    {
        $basicInfo = BasicInfo::create([
            'Emp_name' => $request->Emp_name,
            'DOB' => $request->DOB,
        ]);
    }

当我点击保存按钮时,会出现错误SQLSTATE[22007]:无效的日期时间格式:1292列的不正确日期值:'2022年8月2日'。我该如何解决?


停止将日期存储为文本,应该将它们存储在正确的日期或日期时间列中。 - Tim Biegeleisen
$table->date('DOB') 这样写是不对的吗?你能简要地解释一下吗? - 16_018_RHR
3个回答

3
你需要解析前端发送的日期格式。
以下代码适用于你的情况:
$dob = \Carbon\Carbon::parse($request->DOB);

如果您想更严格地验证请求格式,可以首先验证格式,例如:

内联:

$request->validate([
  'DOB' => 'date_format:j m, Y'
]);

关于验证的更多信息: https://laravel.com/docs/9.x/validation#rule-date-format


public function store(Request $request) { $basicInfo = BasicInfo::create([ 'Emp_name' => $request->Emp_name, 'DOB' =>$dob = \Carbon\Carbon::parse($request->DOB); ]); }你是指这个吗? - 16_018_RHR
是的,如果您将其内联,则不需要$dob变量。您试过了吗? ;) - Ksi
@16_018MD.REAZULHASANRAHI 很酷!请随意将答案标记为已接受。 - Ksi

2

在你的模型BasicInfo中使用访问器。 报错是因为MySQL DOB列类型date需要'Y-m-d'格式。

protected function dob(): Attribute
{
    return Attribute::make(
        set: fn($value) => Carbon::createFromFormat('d M, Y', $value),
    );
}

1

你需要将日期时间格式转换为与数据库表中DOB数据类型匹配的格式。

因此,请尝试以下方法:

date('Y-m-d H:i:s', strtotime($request->DOB));

希望能帮到你!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接