Pessoal, como é feito para converter um campo data que vem do formulário com o padrão 01/02/2001 para 2001/02/01 que é o padrão Date no banco. Já gostaria de saber como exibir na view no formato 01/02/2001. Grato.
Pessoal, como é feito para converter um campo data que vem do formulário com o padrão 01/02/2001 para 2001/02/01 que é o padrão Date no banco. Já gostaria de saber como exibir na view no formato 01/02/2001. Grato.
Oi Leandro. O PHP tem uma função DateTime::createFromFormat(), que no seu caso você poderia usar assim:
$objetoDateTime = DateTime::createFromFormat('d/m/Y', $suaData);
//Salva no banco $objetoDateTime
Na hora de mostrar na view:
$data = new DateTime ($dataDoBanco);
$novaData = $data->format('d/m/Y');
Abraços.
Olá amigo, está dando um erro, acho que fiz algo errado, podes conferir se está ok? Veja como ficou o código:
class Usuario extends Model {
$objetoDateTime = DateTime::createFromFormat('d/m/Y', $data_nascimento);
public $timestamps = false;
protected $table = 'usuarios';
protected $fillable =
array ('nome','email','cpf', 'rg', 'data_nascimento', 'sexo', 'telefone', 'cep', 'rua',
'numero', 'complemento', 'bairro', 'cidade', 'uf', 'campu_id');
O erro retornado:
FatalErrorException in Usuario.php line 11:
syntax error, unexpected '$objetoDateTime' (T_VARIABLE), expecting function (T_FUNCTION)
Leandro, esse código precisa estar dentro de uma função. Ele está isolado no meio da classe, por isso não vai funcionar. Coloque no controller, em vez de colocar no model. Abraços.
Desse forma?
<?php namespace senge\Http\Controllers;
use senge\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Request;
use Validator;
use senge\Usuario;
use senge\Campu;
use senge\Ensino;
use senge\Http\Requests\UsuarioRequest;
class UsuarioController extends Controller {
public function novo(){
return view('/usuario.formulario')->with('campus', Campu::all());
}
public function adiciona(UsuarioRequest $request){
$objetoDateTime = DateTime::createFromFormat('d/m/Y', $data_nascimento);
Usuario::create($request->all());
return redirect ('/usuarios')->withInput();
}
}
Esta dando um erro:
FatalErrorException in UsuarioController.php line 40:
Class 'senge\Http\Controllers\DateTime' not found
Ah, sim, me esqueci da barra invertida "\". Em vez de DateTime::createFromFormat, use \DateTime::createFromFormat.
Sem a barra invertida ele vai tentar procurar no seu namespace e não vai achar a classe DateTime.
Amigo, poderia verificar se está ok dessa forma? Ainda está dando erro!
public function adiciona(UsuarioRequest $request){
Usuario::create($request->all());
$objetoDateTime = \DateTime::createFromFormat('d/m/Y', $data_nascimento);
return redirect ('/usuarios')->withInput();
}
Leandro, se você quer salvar no banco você precisa incluir essa data quando você cria o Usuario. Precisa estar no request que você passa como parâmetro ao fazer Usuario::create($request->all()). Nesse caso, tente fazer o seguinte, antes de fazer o create:
$request->data_nascimento = \DateTime:: createFromFormat ('d/m/Y', $request->data_nascimento);
Usuario::create($request->all());
O problema é que você está atribuindo o DateTime a uma variável e não está fazendo nada com ela. Você precisa efetivamente salvar ela no banco ao criar o usuário.
Eu escrevi $request->data_nascimento mas o nome da propriedade deve ser o name que vem do form.
Tomás, olha só, no banco o campo data_nascimento esta configura com date no formato (0000-00-00), tentei efetuar dessa forma mas não gravou a data!
Tente formatar no formato usado no banco nesse caso:
\DateTime:: createFromFormat ('d/m/Y', $request->data_nascimento)->format('Y-m-d');
Puxa vida, não sei o que estou fazendo de errado, ele não grava, mas se eu colocar no campo form a data assim: 2001-03-01 ai ele grava.
UsuarioController.php
public function adiciona(UsuarioRequest $request){
$request->data_nascimento = \DateTime:: createFromFormat ('d/m/Y', $request->data_nascimento)->format('Y-m-d');
Usuario::create($request->all());
//$objetoDateTime = \DateTime::createFromFormat('d/m/Y', $data_nascimento);
return redirect ('/usuarios')->withInput();
}
Muito estranho, porque a função DateTime, da forma como te passei, só deve funcionar com datas d/m/Y. A função funciona assim: o primeiro argumento é o formato da data que vem como parâmetro para ela no segundo parâmetro, e ela devolve um objeto DateTime que pode ser formatado de várias formas, inclusive 'Y-m-d'.
Então não sei por que não está funcionando. Tem certeza que o name do input é realmente data_nascimento? Coloque a seguinte linha após formatar a data e antes de criar o Usuario:
dd($request->data_nascimento);
Assim vamos saber o que de fato está sendo passado para a construção do model.
Olá amigo, adicionei e retornou:
"2003-01-01"
Essa data está correta ou ficou distorcida?
Então não grava no banco, se eu coloco a data nesse formato ela grava, mas quando digito no formato d/m/Y não está indo, estou achando estranho pois parece que está convertendo.
Está convertendo. Se você digitou 01/01/2003 e depois mostrou 2003-01-01 é porque o DateTime funcionou certinho. Ele não vai para o banco e no lugar grava o que? Grava null?
Isso grava 0000-00-00
Não teria que declarar algo aqui no Model?
protected $fillable =
array ('nome','email','cpf', 'rg', 'data_nascimento', 'sexo', 'telefone', 'celular', 'cep', 'rua',
'numero', 'complemento', 'bairro', 'cidade', 'uf', 'campu_id', 'curso_id', 'ensino_id');
Não, o seu model está certo. Pelo menos eu não vejo problema nele. Acho muito estranho o que está acontecendo. Essa data transformada deveria funcionar corretamente.
Amigo deu certo, seguindo a sua dica:
Muito obrigado
$usuario = new Usuario;
$usuario->nome = $request->nome;
$usuario->cidade = $request->cidade;
$usuario->data_nascimento = $request->data_nascimento;
Que bom Leandro!
Disponha.