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.




