0

Detectando Datas Inválidas

criado por Renata Albuquerque em 02/04/2002 12:23pm
A função checkdate() foi feita exatamente para isso (página no manual -> http://www.php.net/manual/pt_BR/function.checkdate.php).

<?php
$valida = checkdate($mes, $dia, $ano);
?>

Se a data fornecida pelo usuário num formulário for inválida, será retornado o número 0 (falso) e se for válida, o número 1 (verdadeiro).

Exemplo:

<?php
// A data 30/02/2001 é inválida, portanto $valida será 0
$valida = checkdate(02, 30, 2001);

// A data 30/03/2001 é inválida, portanto $valida será 1
$valida = checkdate(03, 30, 2001);
?>

Além da função checkdate(), você pode também usar a função mktime() (página do manual -> http://www.php.net/manual/pt_BR/function.mktime.php) para "consertar" datas inválidas automaticamente. Essa função recebe como parâmetros o ano, mês e dia de uma data qualquer e retorna o timestamp UNIX dessa data específica.

O bom dessa função é que se for passada uma data inválida como '30/02/2002', a função mktime() vai retornar o timestamp UNIX do dia '02/03/2002', ou seja, 2 dias a mais do que o máximo de dias para o mês de fevereiro em 2002. Muitas vezes esse tipo de conversão automática é preferida ao checamento manual da data, então vale essa dica para essas vezes.

<?php
$ano = 2002;
$mes = 2;
$dia = 30;

// os 3 primeiros parâmetros são 'hora', 'minuto' e 'segundo'
$timestamp = mktime(0, 0, 0, $mes, $dia, $ano);
// essa próxima linha vai imprimir '2/3/2002'
echo date("d/m/Y", $timestamp);
?>

É isso aí pessoal, enviem sugestões e dicas sobre validação de datas como comentários abaixo!


"Bem aventurados os retos em seus caminhos, que andam na lei do Senhor." (Salmos 119:1)

Comentários:

Mostrando 1 - 6 de 6 comentários
fccd disse:
É muito está verificação de data!
Data é sempre uma coisa chata de mexer em programação!!

Show de Bola !
05/01/2008 7:06am (~9 anos atrás)

Show de bola, mas se em um formulário, o usuário colocar a data errada, como fazer para ao invés de usar o mktime para ´consertar` a data, avisar o usuário q a data está errada e não deixar ele efetuar o cadastro?
Abraço!
29/03/2006 6:07am (~10 anos atrás)

Rafael Gouvea disse:
Muito bom, eu conhecia essa função mktime,
porém não sabia que ela checava automaticamente.

Thanks pela dica...
01/06/2005 7:48am (~11 anos atrás)

Tulio disse:
Muito bom o artigo, parabens.
08/08/2004 3:25pm (~12 anos atrás)

Espero que você não tenha se importado com isso, pois dei uma incrementada pois achei que estava muito simples. Além do mais, pouca gente conheçe essa dica da função mktime().

--Joao
03/04/2002 10:25pm (~14 anos atrás)

Obrigada por ter incrementado o artigo ficou super 10!
03/04/2002 2:27pm (~14 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)