Publicidade (Anuncie Aqui)

Função para validação de datas no PHP

Função para validação de datas no PHP

Fala pessoal! :D

Hoje vou mostrar como fazer a validação do formato de uma data…

A lógica é bem simples: uma data pode vir em vários formatos: AAAA-MM-DD, DD/MM/AAAA, AAAAMMDD, DDMMAAAA e por aí vai… E você precisa de uma função que verifique se é uma data válida, independente do seu formato.

A função poderia ser assim:

<?php
/**
* Validate a date
*
* @param    string    $data
* @param    string    formato
* @return    bool
*/
function validaData($data, $formato = 'DD/MM/AAAA') {
switch($formato) {
case 'DD-MM-AAAA':
case 'DD/MM/AAAA':
list($d, $m, $a) = preg_split('/[-./ ]/', $data);
break;

case 'AAAA/MM/DD':
case 'AAAA-MM-DD':
list($a, $m, $d) = preg_split('/[-./ ]/', $data);
break;

case 'AAAA/DD/MM':
case 'AAAA-DD-MM':
list($a, $d, $m) = preg_split('/[-./ ]/', $data);
break;

case 'MM-DD-AAAA':
case 'MM/DD/AAAA':
list($m, $d, $a) = preg_split('/[-./ ]/', $data);
break;

case 'AAAAMMDD':
$a = substr($data, 0, 4);
$m = substr($data, 4, 2);
$d = substr($data, 6, 2);
break;

case 'AAAADDMM':
$a = substr($data, 0, 4);
$d = substr($data, 4, 2);
$m = substr($data, 6, 2);
break;

default:
throw new Exception( "Formato de data inválido");
break;
}
return checkdate($m, $d, $a);
}
?>

Tá… mas o que essa função realmente faz?

Vamos lá… Criamos uma função que precisa de dois argumentos, a data a ser validada ($data) e o seu formato ($formato).. Definimos também um valor padrão para o segundo argumento.

Dentro da função nós fazemos um switch() que equivale (em alguns casos) a uma seqüência longa de ifs e elses… Cada bloco de case acontecerá apenas quando $formato for igual ao valor especificado no case (caso). Caso o formato não esteja especificado em nenhum case, é exibida uma mensagem de erro com o throw new Exception().

Em cada case nós temos uma forma de “quebrar” a data e pegar cada uma das suas partes: dia ($d), mês ($m) e ano ($a)… Partes essas que serão verificadas usando a função checkdate() na última linha da função.

Por fim, a função retorna verdadeiro (true) ou falso (false)… Então podemos usá-la da seguinte maneira:

<?php
if (validaData('12/04/2009', 'DD/MM/AAAA')) {
echo "Data valida!";
} else {
echo "Data invalida!";
}
// Data valida

echo "<br />";

if (validaData('20090412', 'AAAAMMDD')) {
echo "Data valida!";
} else {
echo "Data invalida!";
}
// Data valida

echo "<br />";

if (validaData('04/12/2009', 'AAAA-MM-DD')) {
echo "Data valida!";
} else {
echo "Data invalida!";
}
// Data invalida
?>

Ahh.. essa função também te ajuda a validar datas vindas do MySQL (no formato AAAA-MM-DD).

E aí? Gostaram? :)

Você também vai gostar de ler:

Postado em MySQL, PHP, Tutoriais

Com as tags , , , , , ,

Escrito por Thiago Belem

Gostou desse artigo?

Não se esqueça de assinar o RSS e divulgue-o para o mundo:

  • http://admolin.com/ André D. Molin

    Muito show thiago. Parabéns.

  • http://admolin.com/ André D. Molin

    Muito show thiago. Parabéns.

  • Renato

    Thiago, vim aqui lhe parabenizar pelo site, está muito completo.

    Já o adicionei aos favoritos.

    (Só tem um detalhe: não preenchi o endereço de e-mail, ele pediu senha e depois mostrou o formulário, quando cliquei aqui no campo sumiu o texto que eu tinha digitado. Outra coisa, se estou digitando aqui neste campo, clico no campo e-mail e tento retornar para cá, apaga minha mensagem também). Estou usando o chrome.

    Abraço

  • Renato

    Thiago, vim aqui lhe parabenizar pelo site, está muito completo.

    Já o adicionei aos favoritos.

    (Só tem um detalhe: não preenchi o endereço de e-mail, ele pediu senha e depois mostrou o formulário, quando cliquei aqui no campo sumiu o texto que eu tinha digitado. Outra coisa, se estou digitando aqui neste campo, clico no campo e-mail e tento retornar para cá, apaga minha mensagem também). Estou usando o chrome.

    Abraço

  • Tiago Torres

    Excelente!!! Parabéns cara… teu site é uma referência pra quem desenvolve em PHP!!

  • Tiago Torres

    Excelente!!! Parabéns cara… teu site é uma referência pra quem desenvolve em PHP!!

blog comments powered by Disqus