Detectando Datas Inválidas
A função checkdate() foi feita exatamente para isso (página no manual -> http://www.php.net/manual/pt_BR/function.checkdate.php).
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:
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.
É 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)
<?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)
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!
Abraço!
29/03/2006 6:07am
(~18 anos atrás)
Muito bom, eu conhecia essa função mktime,
porém não sabia que ela checava automaticamente.
Thanks pela dica...
porém não sabia que ela checava automaticamente.
Thanks pela dica...
01/06/2005 7:48am
(~19 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
--Joao
03/04/2002 10:25pm
(~22 anos atrás)
Data é sempre uma coisa chata de mexer em programação!!
Show de Bola !