验证Laravel模型中的日期和时间


Validate Date and Time in the Laravel Model

我有一个日期选择器插件,可以弹出日历视图,允许用户选择日期+时间,但它生成的格式是:

May 9, 2016 8:30 AM

当存储到数据库时,我需要的格式是:

2016-09-05 08:30:00

在我的应用程序的控制器中,我有:

public function save(Request $request)
{
    Entry::create($request->all());
    return redirect('entries');
}

它保存了用户的表单输入,但由于格式不正确,它没有保存日期时间。在将日期输入数据库之前,我尝试创建一个新函数来格式化日期。

public function formatDate($data)
{
    $returnDate = DateTime::createFromFormat('Y-d-m G:i:s', $data);
    return $returnDate->format('Y-d-m G:i:s');
}

但是,当我从save函数调用函数时,它会显示未定义的函数。我做错了什么吗?或者实现这一点的正确方法是什么?

您必须为DateTime::createFromFormat()设置正确的格式。根据格式创建意味着,您必须告诉模式与给定日期中的任何信息相匹配。对于你的约会,模式是:

DateTime::createFromFormat('F j, Y g:i A', $data);

下面是一个演示:https://eval.in/567629

所有格式选项的列表:http://php.net/manual/en/function.date.php

两个函数都在模型内部?如果是,您是如何尝试调用formatDate函数的?

你可以使用匿名函数,试试:

$formatted_date = function() use ($data) { $returnDate = DateTime::createFromFormat('Y-d-m G:i:s', $data); return $returnDate->format('Y-d-m G:i:s'); };

在控制器或模型内部。

在Laravel中,created_at和updated_at被投射到Carbon对象

https://laravel.com/docs/5.2/eloquent-mutators#date-突变

对于你的约会对象,你可以做同样的事情

class User extends Model { /** * The attributes that should be mutated to dates. * * @var array */ protected $dates = ['created_at', 'updated_at', 'your_date']; }

然后,在保存日期时,它将被转换为正确的格式。

试试看,让我们知道你进展如何!

例如;

$data = "May 9, 2016 8:30 AM";
return  date('Y-d-m H:i:s',strtotime($data));