Transformar datas para gravar no banco de dados (MySQL, Postgres e outros)

Publicado por Phylipe Venancio Soares (última atualização em 29/03/2018)

[ Hits: 3.372 ]

Homepage: http://www.titan.inf.br

Download funcoes_datas.php.txt




É muito chato ter um campo de data preenchido aos olhos do usuário no formato dd/mm/YYYY e quando vai gravar no banco de dados ter que fazer malabarismos.

Por isso fiz duas funções que convertem as datas para gravar no banco de dados e também ao contrário, pegar o resultado gravado no banco de dados e converter para um formato mais agradável ao usuário final.

As datas podem ser passadas com horário ou não.

  



Esconder código-fonte

<?php

function mysql2date($data){
    /*
        Formato da data:
            2018-03-21 14:47:25 -> retorna -> 21/03/2018 14:47:25
            2018-03-21 14:47 -> retorna -> 21/03/2018 14:47
            2018-03-21 -> retorna -> 21/03/2018
    */

    $data = trim($data);
    $ano = substr($data,0,4);
    $mes = substr($data,5,2);
    $dia = substr($data,8,2);
    $data_arrumada = "$dia/$mes/$ano";

    ## Se a data fornecida tiver hora, coloca tudo junto.
    if(strlen($data)==19){
        $caracteres = -8;
    }
    if(strlen($data)==16){
        $caracteres = -5;
    }
    if(strlen($data)>10){
        $hora = substr($data,$caracteres);
        $data_arrumada = $data_arrumada." ".$hora;
    }
    return $data_arrumada;
}

function date2mysql($data){
    /*
        Formato da data:
            21/03/2018 14:47:25 -> retorna -> 2018-03-21 14:47:25
            21/03/2018 14:47 -> retorna -> 2018-03-21 14:47
            21/03/2018 -> retorna -> 2018-03-21
    */

    $data = trim($data);
    $dia = substr($data,0,2);
    $mes = substr($data,3,2);
    $ano = substr($data,6,4);
    $data_arrumada = "$ano-$mes-$dia";

    ## Para Formato com hora completa HH:mm:ss
    if(strlen($data)==19){
        $caracteres = -8;
    }
    ## Para Formato com hora parcial HH:mm
    if(strlen($data)==16){
        $caracteres = -5;
    }
    if(strlen($data)>10){
        $hora = substr($data,$caracteres);
        $data_arrumada = $data_arrumada." ".$hora;
    }
    return $data_arrumada;
}

## COMO USAR

echo "Data Formatada para gravar MySql: ".date2mysql("23/03/2018 13:13:00");

/*
   Resultado
   Data Formatada para gravar MySql: 2018-23-03 13:13:00
*/

echo "Data Formatada de Mysql para padrão Brasileiro: ".mysql2date("2018-23-03 13:13:00");

/*   Resultado
   Data Formatada de Mysql para padrão Brasileiro: 23/03/2018 13:13:00

*/
?>

Scripts recomendados

Mostrar Status do ICQ na Web

Mega Sena

Upload de fotos com banco de dados

Data por Extenso

Criando um menu de paginação de resultados com algumas funcionalidades


  

Comentários
[1] Comentário enviado por Stolato em 29/03/2018 - 13:35h

Tem uma forma mais simples de formatar a data e exibir na tela basta usar o próprio date

Ex: date("d/m/Y H:i:s",strtotime($data));

[2] Comentário enviado por iaferro em 31/03/2018 - 01:26h

Amigo tem a função DATE_FORMAT() do próprio MySQL muito mais fácil.

[3] Comentário enviado por p4ulodi4s em 30/04/2018 - 23:06h

Oi.

Interessante, mas como já postaram, pode não ser a melhor abordagem...

Uma forma mais OO seria usar a classe Datetime:

$textDate = "01/01/2018";

#Nossa data é um Datetime e não uma String( cuidado com a obsessão primitiva )
$date = Datetime::createFromFormat( "d/m/Y", $textDate );

echo $date->format( "Y-m-d" );

Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA
Oracle Certified Associate, Java SE Programmer - OCA

http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts