Дата записывается неправильно в базе m-d-Y вместо Y-m-d


Setei формат даты для отображения "d-m-Y", в то время как формат для записи есть в базе "Y-m-d".

Однако во время записи в базу, что-то происходит, и данные идут в формате "m-d-Y", и что данные будут искажены, особенно, если день превышает 12, то дата будет хоть 31-12-1969 автоматически, и это дата, которая записывается в базу.

установлен Laravel 4.1, и базой данных MySql.

Вот коды:

Controller

public function getEdit($id) {

    $despesa = Despesas::find($id);
    $despesa->valor = str_replace('.', ',', $despesa->valor);

    $despesasOrigem = array('' => 'Selecione...') + DespesasOrigem::lists('descricao', 'id');
    $despesasTipos = array('' => 'Selecione...') + DespesasTipo::lists('descricao', 'id');

    return View::make('despesas.despesasEdit')
        ->with('despesa', $despesa)
        ->with('despesas_tipo_id', $despesasTipos)
        ->with('despesas_origem_id', $despesasOrigem);
}

public function postEdit() {

    $dados = Input::all();

    $dados['data'] = date('Y/m/d', strtotime($dados['data']));
    $dados['users_id'] = Auth::User()->id;

    $valida = Validator::make($dados, Despesas::$rules);

    if ($valida->fails()) {

        return Redirect::to('despesas/edit' . Input::get('id') )->withInput()->withErrors($valida);

    } else {

        $despesa = Despesas::find(Input::get('id'));
        $despesa->descricao = $dados['descricao'] ;
        $despesa->data = $dados['data'] ;
        $despesa->valor = $str_replace(',', '.', $dados['valor']);
        $despesa->users_id = $dados['users_id'] ;
        $despesa->despesas_tipo_id = $dados['despesas_tipo_id'] ;
        $despesa->despesas_origem_id = $dados['despesas_origem_id'] ;

        $despesa->save();

        $despesa = Despesas::find($despesa->id);
        $despesasOrigem = array('' => 'Selecione...') + DespesasOrigem::lists('descricao', 'id');
        $despesasTipos = array('' => 'Selecione...') + DespesasTipo::lists('descricao', 'id');

        return View::make('despesas.despesasEdit')
            ->with('despesa', $despesa)
            ->with('despesas_tipo_id', $despesasTipos)
            ->with('despesas_origem_id', $despesasOrigem)
            ->with('sucesso', 'Despesa atualizada com sucesso!');

    }
}

View

@extends('templates.master')

@section('conteudo')

<h2>Editar Despesa</h2>

@if(isset($sucesso))
  {{ Alert::success($sucesso) }}
@endif

{{ Form::open() }}

  {{ Form::hidden('id', $despesa->id) }}

  {{ Form::label('Descrição') }}
  {{ Form::input('text', 'descricao', $despesa->descricao) }}
  @if($errors->first('descricao') != null)
    {{ Alert::warning($errors->first('descricao', 'O campo descrição é obrigatorio.'))}}
  @endif

  {{ Form::label('Valor') }}
  {{ Form::input('text', 'valor', $despesa->valor) }}
  @if($errors->first('valor') != null)
    {{ Alert::warning($errors->first('valor', 'O campo valor é obrigatório'))}}
  @endif

  {{ Form::label('Data da despesa') }}
  {{ Form::input('text', 'data', date('d/m/Y', strtotime($despesa->data))) }}    
  @if($errors->first('data') != null)
    {{ Alert::warning($errors->first('data', 'O campo data é obrigatório'))}}
  @endif

  {{ Form::label('despesas_tipo_id', 'Tipo:') }}
  {{ Form::select('despesas_tipo_id', $despesas_tipo_id, $despesa->despesas_tipo_id) }}
  @if($errors->first('despesas_tipo_id') != null)
    {{ Alert::warning($errors->first('despesas_tipo_id', 'O campo Tipo de Despesa é obrigatório'))}}
  @endif

  {{ Form::label('despesas_origem_id', 'Origem:') }}
  {{ Form::select('despesas_origem_id', $despesas_origem_id, $despesa->despesas_origem_id) }}
  @if($errors->first('despesas_origem_id') != null)
    {{ Alert::warning($errors->first('despesas_origem_id', 'O campo Origem da Despesa é obrigatório'))}}
  @endif

  {{ Form::submit('Enviar')}}

{{ Form::close() }}

@stop

Route

Route::controller('despesas', 'DespesasController');

.

<?php

class Despesas extends Eloquent {

    protected $table = "despesas";

    protected $softDelete = true;

    /**
     * Regras de validação da table despesas 
     *
     * @return array
     */
    public static $rules = array (
        'descricao'             => 'required',
        'valor'                 => 'required|numeric',
        'data'                  => 'required|date',
        'despesas_tipo_id'      => 'required',
        'despesas_origem_id'    => 'required',
        'users_id'              => 'required'
        );

     protected $guarded = array('id');


    public function despesasTipo()
    {
        return $this->belongsTo('DespesasTipo','despesas_tipo_id');
    }

    public function despesasOrigem()
    {
        return $this->belongsTo('DespesasOrigem','despesas_origem_id');
    }

    public function user()
    {
        return $this->belongsTo('User','users_id');
    }

}
Author: hernandev, 2013-12-22

2 answers

Тебя controller, метода postEdit(), измените эту строку:

$dados['data'] = date('Y/m/d', strtotime($dados['data']));

, Для этого:

$dados['data'] = DateTime::createFromFormat('d/m/Y', $dados['data'])->format('Y-m-d');


В твоей view, ты также мог бы использовать класс DateTime. В место:

{{ Form::input('text', 'data', date('d/m/Y', strtotime($despesa->data))) }}

Ты мог бы использовать:

{{ Form::input('text', 'data', with(new DateTime($despesa->data))->format('d/m/Y') }}

, Еще лучше, чем это, ты, может определить, в твой model, поля, которые будут рассматриваться как дата, через собственность защищена $dates, так что все поля в нем указаны опорой объект Carbon, который позволяет использовать метод format() напрямую:

class Despesas extends Eloquent
{
    /* ... */

    protected $dates = array('data');

    /* ... */
}

, Сделав все это, в твоем view, презентация будет выглядеть следующим образом:

{{ Form::input('text', 'data', $despesa->data->format('d/m/Y') }}
 8
Author: Paulo Freitas, 2013-12-30 18:25:03

Я использовал атрибут "date" HTML5, 2 преимущества:

  1. Не нужно конвертировать, чтобы показать на экране, потому что, HTML5 делает автоматически.
  2. , Приносит календарь для пользователя, чтобы выбрать дату с помощью мыши.

В Этом случае просто:

{{ Form::input('date', 'data', $despesa->data) }}

И так Просто !

 0
Author: helderam, 2013-12-23 18:03:49