.:: Carlos Alberto Junior - Tecnologia e Informação ::.

Converter datas para o MySQL

Boa tarde a todos,

Algo obrigatório no desenvolvimento Web ou Desktop quando é trabalhado com datas em formulários, é necessário converte-las para o respectivo formato do banco. Não é possível persistirmos a data diretamente porque geralmente formatamos as datas nos formulários para um formato legível para o usuário, no caso:

  • dd/mm/YYYY para datas normais;
  • dd/mm/YYYY HH:ii:ss para campos com data e hora;

Para formatarmos essas datas para o formato do MySQL, que no caso é YYYY-mm-dd para DATE e YYYY-mm-dd HH:ii:ss para DATETIME e TIMESTAMP.

O script que vou apresentar aqui é para converter a string para o respectivo formato, no final da conversão apenas valido se todos os caracteres foram preenchidos, mas não faço uma validação real (como meses, dias, etc.).

public function parse_datetime ($campo)
{
if(!$campo)
{
return date('Y-m-d HH:ii:ss');
}
else
{
// YYYY-mm-dd HH:ii:ss
$campo = $this->parse_date($campo) . " " . substr($campo, 11, 2).":".substr($campo, 14, 2).":".substr($campo, 17, 18);

// Caso não tenha os segundos.
if(preg_match('/:$/', $campo))
{
$campo = $campo.date('s');
}

if(preg_match('/([0-9]){4}-([0-9]){2}-([0-9]){2}[\s]([0-9]){2}:([0-9]){2}:([0-9]){2}/', $campo))
{
return $campo;
}
else
{
return date('Y-m-d H:i:s');
}
}
}

A função acima converte uma string no formato dd/mm/YYYY HH:ii:ss. Na função abaixo, é mostrada a implementação da função para formatar strings no formato dd/mm/YYYY.

public function parse_date ($campo)
{
if(!$campo)
{
return date('Y-m-d');
}
else
{
// YYYY-mm-dd
$campo = substr($campo, 6, 4)."-".substr($campo, 3, 2)."-".substr($campo, 0, 2);

if(preg_match('/([0-9]){4}-([0-9]){2}-([0-9]){2}/', $campo))
{
return $campo;
}
else
{
return date('Y-m-d');
}
}
}

No que neste exemplo há o princípio de reutilização de código, ou seja, para formatar uma data TIMESTAMP OU DATETIME, é utilizado a função parse_date para formatar o início da nova data.

Quaisquer dúvidas é só postar.

Abraços e até a próxima.

Comentarios (0)

RSS feed Comments

Escreva seu Comentario

smaller | bigger

busy