Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Como recuperar o valor de uma data com o bootstrap datepicker

Boa tarde Senhores!

Estou fazendo um projeto em php com o framework Codeigniter 3 e tenho uma dúvida que acredito ser simples. Em um formulário, tenho a data de nascimento de um membro, utilizo o datepicker (bootstrao e js) para a seleção da data. Quando eu seleciono a data o campo é preenchido normalmente, porém na hora de inserir os dados no banco, os valores são inseridos desta forma 0000-00-00.

Vou postar a div em que está o campo de data de nascimento, o script que chama o datepicker ao clicar no campo e o método do meu controller para salvar o membro.

Div de data de nascimento:

<div class="form-group>
    <label class="control-label col-sm-2 for="date"> Data de Nascimento * </label>
    <div class="col-sm-4">
        <div class="input-group">
            <div class="input-group-addon round-form">
                <i class="fa fa-calendar"></i>
            </div>
            <input type="text" class="form-control round-form" id="dtnasc" name="dtnasc" placeholder="DD/MM/YYYY" required autocomplete="false" value="<?= $membro['dtnasc']?>">
        </div>
    </div>
</div>

Script que chama o datepicker:

<script>

$(document).ready(function(){
    var date_nasc=$("#dtnasc"); 
    date_nasc.datepicker({
        dateFormat: 'dd/mm/yyyy',
        viewMode: "years",
        todayHighlight: true,
        autoclose: true
        });
    });

</script>

Controller Membro.php (Método Salvar)

public function Salvar(){

    // Carrega o model dos Membros
    $this->load->model('membro_model');
    // Recupera os membros através do model
    $membro = $this->membro_model->GetAll('id');
    // Passa os membros para o array que será enviado à home
    $dados['membro'] = $membro;
    // Executa o processo de validação do formulário    
    $validacao = self::Validar();
    // Verifica o status da validação do formulário
    // Se não houverem erros, então insere no banco e notifica o usuário
    // caso contrário informa ao usuário os erros da validação do formulário
    if($validacao){
    // Recupera os dados via POST
    $dados = $this->input->post();
    // Insere os dados no banco recuperando o status dessa operação
    $status = $this->membro_model->Inserir($dados);
    // Checa o status da operação e apresenta a mensagem na sessão
    if(!$status){
        $this->session->set_flashdata('error', 'Não foi possível inserir o membro' . $dados['nome'] . '. Verifique se os campos do formulário foram preenchidos corretamente');
        redirect('admin/cadastros/membros/novo'); // Recarrega a página de cadastro de membros
    } else {
        $this->session->set_flashdata('success', 'O membro ' . $dados['nome'] . ' foi inserido com sucesso.');
        $this->session->set_flashdata('info', 'Você tem um novo registro na tabela Membros.');
        redirect('admin/cadastros/membros/index'); // Redireciona para a tabela de listagem de membros
        }
    }
}

echo 'Senhores, se puderem me ajudar Deus há de vos abençoar.';

2 respostas

Dá um var_dump em $dados. Em que formato sua data está indo?

Eu costumava usar o datepicker do jquery ui, e independente de como ele exibia para o usuário, a data no back-end sempre vinha no formato Y-m-d.

Acho que esta mandando com o formato incorreto de acordo com essa configuração:

 dateFormat: 'dd/mm/yyyy',

Se for isso, tente alterar para :

 dateFormat: 'yyyy-mm-dd',

Ou no Backend trate esses dados assim :

$dt_nasc = imoplode("-",  array_reverse( explode("/", $dados['dtnasc']) ) );

Explicando rapidamente, separo os digitos pela "/" com a função explode, depois reverto a ordem do array que é retornado com array_reverse e junto tudo denovo com a função implode com o "-" pra ficar no formato correto.