从数据库发布日期

时间:2015-12-05 16:32:29

标签: php sql laravel blade

我是Laravel 5.1的新手,当我从数据库中检索日期字符串并尝试在刀片上显示时,我不知道自己做错了什么。

它不起作用,来自de数据库的日期没有出现在Form::date上。

我知道我在这里缺少一些至关重要的东西:)

以下是视图代码:

<div class="col-sm-6">
    <div class="form-group">
        {!! Form::label('birth_date', trans('userapps/userapps.birth_date'))!!}
        {!! Form::date('birth_date', Input::old('birth_date'), array('class' => 'form-control input-lg'))!!}
        @if ($errors->has('birth_date')) <p class="help-block">{{ $errors->first('birth_date') }}</p> @endif
    </div>
</div>

这是控制器代码:

public function edit($id)
{
    //show all saved values for editing

    $userapp = UserApplication::findOrFail($id);

    $birth_date = DateTime::createFromFormat('d/m/Y', $userapp->birth_date)->format('d/m/Y');


    $data = array('birth_date' => $birth_date, 'userapp' => $userapp);

    return view('admin/userapps/edit')->with($data);
}

提前致谢。

1 个答案:

答案 0 :(得分:2)

日期输入only accepts值采用以下格式yyyy-dd-mm。这意味着您应该像这样格式化日期值:

DateTime::createFromFormat('d/m/Y', $userapp->birth_date)->format('Y-m-d');

浏览器将确保根据操作系统区域设置显示它。例如,如果我的日期输入为value="2015-12-05",则根据我的操作系统区域设置显示为05/12/2015

一旦你解决了这个问题,就会出现另一个很可能会阻止日期显示的问题。您将默认值设置为Input::old('birth_date'),这是您第一次访问表单时null,因为在提交表单之前没有旧的输入数据。所以在你的控制器动作中你应该这样做:

public function edit($id)
{
    $userapp = UserApplication::findOrFail($id);

    // Use old input value and if that's not available then use the $userapp one
    $birth_date = Input::old('birth_date') ?: DateTime::createFromFormat('d/m/Y', $userapp->birth_date)->format('Y-m-d');
    $data =['birth_date' => $birth_date, 'userapp' => $userapp];

    return view('admin/userapps/edit')->with($data);
}

在您的Blade视图文件中:

{!! Form::date('birth_date', $birth_date, array('class' => 'form-control input-lg'))!!}

如果有的话,它将使用旧的输入值,否则它将使用数据库中的值。

话虽如此,您应该知道日期输入为supported only by a few browsers。 Firefox,Safari和Internet Explorer 根本不支持,因此如果您需要确保用户输入仅限于所有浏览器的日期,我会使用JavaScript日期选择器库代替。