【问题标题】:Post date from database来自数据库的发布日期
【发布时间】:2016-03-10 12:58:33
【问题描述】:

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

它不起作用,数据库中的日期没有出现在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);
}

提前致谢。

【问题讨论】:

  • 您在数据库中存储日期的格式是什么?是 SQL DATE 列吗?
  • 字符串为 dd/mm/yyyy
  • 请尝试将此添加到您的模型中受保护的 $dates = ['birth_date'];它会将日期格式化为 Carbon 对象,看看是否有帮助
  • 没有用,但奇怪的是我把字符串再次转换为日期,它应该可以工作:(

标签: php sql laravel blade


【解决方案1】:

日期输入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 日期选择器库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多