我有一个日期选择器插件,可以弹出日历视图,允许用户选择日期+时间,但它生成的格式是:
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));