2014-12-02 23 views
7

在刀片模板中的提交表单中,我有以下日期表单,它的默认日期如Y-m-d正常工作。提交表格中的Laravel日期格式(d-M-Y)

但我想告诉喜欢d-M-Y日期,我试图找到运气

这里一个可用的解决方案是使用默认的日期是代码:

这里是模型

public static $rules = [ 
    'birthday' => 'date' 
]; 

protected $fillable = ['birthday']; 

这里是控制器方法

public function update($id) 
{ 
    $kid = Kid::findOrFail($id); 

    $validator = Validator::make($data = Input::all(), Kid::$rules); 

    if ($validator->fails()) 
    { 
     return Redirect::back()->withErrors($validator)->withInput(); 
    } 

    $kid->update($data); 
    return Redirect::to('kids/list'); 
} 

这里是刀片模板

{{ Form::model($kid, ['method' => 'PATCH', 'route' => ['kids.update', $kid->id], 'files' => true], ['class' => 'form-horizontal']) }} 
{{ Form::text('birthday', null, ['class' => 'form-control']) }} 
{{ Form::submit('Confirm update', ['class' => 'btn btn-primary']) }} 
{{ Form::close() }} 

UPDATE

这适用于从4.2和更新所有Laravel版本。

对于Laravel 5.1及更新版本,您需要将它安装为separate package,因为它不再是Laravel 5内核的一部分。

决定HTML /表单构建器不是框架的核心要求,因此它从核心中被删除。我链接的软件包是L4内核中包含的软件包,并且将其作为L5兼容性和使用情况的单独软件包进行维护,因此,如果您选择这样做,则可以安全使用该软件包。

感谢@Bogdan的更新。

回答

11

如果您需要一种数据库存储的日期格式,另一种用于用户交互,则需要在显示它之前以及在将其存储到数据库之前进行处理。所以,你应该做这样的事情:

1.转换为表单输入的日期值:

{{ Form::text('birthday', date('d-M-Y', strtotime($kid->birthday)), ['class' => 'form-control']) }} 

2.在保存前将其转换为数据库所需的格式:

public function update($id) 
{ 
    $kid = Kid::findOrFail($id); 

    // Convert birthday format to be compatible with database ISO 8601 format 
    $data = Input::all(); 
    $data['birthday'] = date('Y-m-d', strtotime($data['birthday'])); 

    $validator = Validator::make($data, Kid::$rules); 

    if ($validator->fails()) 
    { 
     return Redirect::back()->withErrors($validator)->withInput(); 
    } 

    $kid->update($data); 
    return Redirect::to('kids/list'); 
} 

如果您想要更加面向对象的日期处理方式,您可以使用Laravel已包含的Carbon

+0

你如何在输入字段中输入日期? (我也更新了一些与处理日期时间值相关的提及)。 – Bogdan 2014-12-02 17:38:38

+0

另外,如果您发布负责创建/更新数据库条目的代码,它可能会有所帮助。 – Bogdan 2014-12-02 17:48:55

+0

我已根据您发布的代码更新了我的答案。 – Bogdan 2014-12-02 19:09:19