PHP - Função para formatar data

A função formataData muda o formato da data e ainda verifica se ela é válida. Ou seja, se o mês tem 28, 29 (ano bissexto),30 ou 31 dias, se o mês tem entre 1 e 12 meses e se o ano tem 4 digitos. Ela retorna true se der tudo certo e false se der erro

PUBLICIDADE

COMENTÁRIOS RECENTES

PHP - Função para formatar data

A função formataData muda o formato da data e ainda verifica se ela é válida. Ou seja, se o mês tem 28, 29 (ano bissexto),30 ou 31 dias, se o mês tem entre 1 e 12 meses e se o ano tem 4 digitos.

A função é um pouco grande e tem cinco parâmetros que serão explicados abaixo:

$data – Data que será convertida;
 
$separadorEnt – Caractere que esta entre o dia, mês, ano de $data;
 
$separadorSai - Caractere que esta entre o dia, mês, ano da data depois de
conevrtida;

$tipoEnt – Aceita dois valores: bra(para data no formato brasileiro) e eua (para datas no formato estadunidense);

$tipoSai – Idem a $tipoEnt, só que para a data convertida

Aqui o código da função:

function formataData($data,$separadorEnt,$separadorSai,$tipoEnt,$tipoSai){

/*
* A variável $data é o formato de entrada da data. EX.: dd/mm/aaa,dd-mm-aaaa,dd.mm.aaaa,aaaa-mm-dd,aaaa/mm/dd,...
* A variável $separadorEnt é o tipo de caracter que separa o dia do ano e mes na data de entrada. EX.: "/","-","."
* A variável $separadorSai é o tipo de caracter que separa o dia do ano e mes na data de saida. EX.: "/","-","."
* A variável $tipo é o formato de saida da data se no formato brasileiro ou estadonidense.
* */

if(ereg("^[0-9]+$separadorEnt+[0-9]+$separadorEnt+[0-9]",$data))

//separa a data pra verificar dia, mes e ano
$data = explode($separadorEnt,$data);

/*
* verifica o tipo da transformação para date de entrada:
* bra para data no formato dd/mm/aaa, dd-mm-aaaa, dd.mm.aaaa,
* e eua para data no formato aaaa-mm-dd,aaaa/mm/dd
*/

switch($tipoEnt){

case "bra":
//pega o dia
$dia = $data['0'];

//pega o mes
$mes = $data['1'];

//pega o ano

$ano = $data['2'];
break;

//se a data tiver no formato estadonidense
case "eua":

//pega o dia
$dia = $data['2'];

//pega o mes
$mes = $data['1'];

//pega o ano
$ano = $data['0'];
break;
}

//seta a variavel
$situacao="";

//verifica o dia valido para os meses de 30 e 31 dias.
if (($dia < 01 || $dia > 30) && ($mes == 04 || $mes == 06 || $mes == 09 || $mes == 11) || $dia > 31){

$situacao .= "Dia inválido!";

}else

// verifica se ano é bissexto

if ($mes == 2 && ($dia < 01 || $dia > 29 || ($dia > 28 && (!is_int($ano/4))))) {

$situacao .= "Dia inválido";

}else

// verifica se o mês é valido
if ($mes < 01 || $mes > 12 ){$situacao .= "Mês inválido!";}

//verifica se o ano tem 4 digitos

$contaAno = strlen($ano);

if($contaAno !=4){

$situacao .= "Ano inválido";

}

/*
* verifica o tipo da transformação: bra para data no formato dd/mm/aaaa
* e eua para data no formato aaaa-mm-dd
*/

switch($tipoSai){
case "bra":
$dataFinal = "$dia$separadorSai$mes$separadorSai$ano";
break;

case "eua":
$dataFinal = "$ano$separadorSai$mes$separadorSai$dia";
break;
}

//verifica se deu erro
$mensagem = $situacao=="" ? $dataFinal : $situacao;

//retorna
return $mensagem;

}//fim da função



Como o código está todo comentado só falta um exemplo de uso que vou mostrar abaixo:

Considere a seguinte data: $data = “14/06/1980” a função retornará $data = “1980-06-14”.

//aplica funcao para formatar data
$data = formataData($data,"/","-","bra","eua");

if($data == "") {

$msg .= "Você não digitou a data!
";

}elseif(!$data){

//pega a mensagem de erro
$msg .= "$data
";

}else{

//formata a data pro bd
$data;
}

Qualquer duvida é só deixar um comentário!! Até a próxima!!


Somente usuários cadastrados podem enviar comentários. Cadastre-se ou faça login