Função para converter datas do MySQL e vice-versa
**Sempre estamos lidando com um banco de dados em nossasaplicações. E é muito comum executarmos tarefas que convertem a datapadrão do MySQL (YYYY-MM-DD) para o padrão brasileiro (DD/MM/YYYY), e vice-versa.**
Pensando nisso que há alguns dias atrás criei uma função que fizesseisso. Porém tinha um "problema". A função tinha 2 parâmetros, oprimeiro a data, e o segundo um verificador para saber se a data emquestão está no formado do MySQL ou do Brasil.
E hoje eu resolvi mudar ela, onde esta tarefa é feita automaticamente agora.
Bom, chega de lero lero. Segue a função abaixo:
<?php
/**
* Função que converte uma data de YYYY-MM-DD para DD/MM/YYYY e vice-versa.
* O tipo da data é automaticamente detectado. Caso não seja nenhum dos dois, a função
* retorna uma mensagem de erro.
*
* @author André D. Molin <contato@dmolin.com.br>
* @version 1.2
* @since 02/09/2009
*
* @string $data (YYYY-MM-DD ou DD/MM/YYYY)
*/
function ConverterDataDB ($data) {
$patternBr = "^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}^";
$patternMySQL = "^(19|20)[0-9]{2}[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])^";
if ( preg_match($patternBr, $data, $matchesBr) === 1 ) {
if ( checkdate($matchesBr[1], $matchesBr[0], $matchesBr[2]) ) {
trigger_error('A data '.$data.' é inválida', E_USER_ERROR);
}
$output = implode('-', array_reverse(explode('/', $data)));
} elseif ( preg_match($patternMySQL, $data, $matchesMySQL) === 1 ) {
if ( checkdate($matchesMySQL[1], $matchesMySQL[2], $matchesMySQL[0]) ) {
trigger_error('A data '.$data.' é inválida', E_USER_ERROR);
}
$output = implode('/', array_reverse(explode('-', $data)));
} else {
trigger_error('A data '.$data.' é inválida', E_USER_ERROR);
}
return $output;
}
?>
Exemplos de uso:
<?php
echo ConverterDataDB('21/03/1985');
// 1985-03-21
echo ConverterDataDB('1985-03-21');
// 21/03/1985
/* ************************ */
/ FORÇANDO DATAS INVÁLIDAS /
/* ************************ */
echo ConverterDataDB('45/02/1990');
// Irá retornar erro
echo ConverterDataDB('5/4/92');
// Irá retornar erro
?>
Espero que tenha ajudado.
Discussão (14)
Carregando comentários...