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: 2.945 ]

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

Descobrir qual SO o usuário que está acessando o seu site/software está utilizando

Gerador de thumbnail

Telefones Públicos da Anatel

Script para noticias no formato rss

gerador de tabelas em html v2.2


  

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 HostGator.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts