Формат даты Laravel в форме представления (d-M-Y)

в форме отправки в шаблоне лезвия у меня есть следующая форма даты, и она отлично работает с датой по умолчанию, такой как Y-m-d.

но я хочу показать дату, как 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() }}

обновление

это работает для всех версий Laravel от 4.2 и новее.

для Laravel 5.1 и новее вам нужно будет установить его как отдельный пакет поскольку он больше не является частью ядра Laravel 5.

было решено, что HTML / Form builder не являются основным требованием для фреймворка, поэтому он был удален из ядра. Пакет, с которым я связан, является тем, который был включен в ядро L4 и поддерживается как отдельный пакет для совместимости и использования L5, поэтому вы можете использовать его, если захотите.

спасибо @Bogdan за это обновление.

1 ответов


Если вам нужен один формат даты для хранения БД и другой для взаимодействия с пользователем, вам нужно обработать его перед отображением и перед хранением в базе данных. Поэтому вы должны сделать что-то вроде этого:

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');
}

Если вы хотите более объектно-ориентированный способ обработки дат вы можете использовать Carbon который уже включен Laravel.