+1

Validação simples de data.

criado por Petter R. Villa Real Silva em 09/03/2006 10:57am
O script abaixo faz uma validação simples para checar se a data é válida e em seguida converte a data inicial e a data final para timestamp para depois verificar se a data inicial é maior da a data final, é simples e ideal para quem está começando a programar em PHP e está precisando validar algum campo de data.

O script abaixo cria o arquivo teste.htm com um formulário básico que irá passar a data inicial e a data final informada pelo usuário:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="teste.php">
  <p>Data inicial:
    <input name="data1" type="text" id="data1" />
  </p>
  <p>Data final:
    <label>
    <input name="data2" type="text" id="data2" />
    </label>
  </p>
  <p> </p>
  <p>
    <label>
    <input name="enviar" type="submit" id="enviar" value="Enviar" />
    </label> 
    </p>
</form>
</body>
</html>

No arquivo PHP é que checado a data para ver se ela é válida e não foi digitada errada pelo usuário, em seguida é convertida para timestamp para fazer validações de forma mais eficiente e transparente. No exemplo é feita uma checagem simples se uma data é maior ou menor que a outra, mas pode ser adaptado tranquilamente conforme a necessidade:

<?php
//Recebe as datas do formulário
$data_ini = $_GET['data1'];
$data_fim = $_GET['data2'];

//Obtém somente os "números" da datas, sem as barras
$datai_explode = explode ("/", $data_ini);
$dataf_explode = explode ("/", $data_fim);

//Faz a checagem das datas
$check_date_ini = checkdate($datai_explode['1'], $datai_explode['0'], $datai_explode['2']);
$check_date_fim = checkdate($dataf_explode['1'], $dataf_explode['0'], $dataf_explode['2']);

// Checa se a data inicial é válida
if ( $check_date_ini == 1 ){
	echo "Data inicial válida. Continuando...";
	echo "<BR>";
}else{
	echo "Data inicial inválida";
	exit;
}
	
//Checa se a data final é válida
if ( $check_date_fim == 1 ) {
	echo "Data final válida. Continuando...";
	echo "<BR>";
}else{
	echo "Data final inválida";
	exit;	
}
	
//Converte a data inicial em timestamp
$ts_ini = mktime($hora, $minuto, $segundo, $datai_explode['1'], $datai_explode['0'], $datai_explode['2']);
echo "Timestamp inicial: ".$ts_ini;
echo "<BR>";

//Converte a data final em timestamp
$ts_fim = mktime($hora, $minuto, $segundo, $dataf_explode['1'], $dataf_explode['0'], $dataf_explode['2']);
echo "Timestamp final: ".$ts_fim;
echo "<BR>";

//Checa se a data final é menor que a data inicial
if ($ts_ini > $ts_fim){
	echo "A data inicial não pode ser maior que a data final.";
	echo "<BR>";
	exit;
}else{
	echo "Data validada com sucesso.";
	echo "<BR>";
}

if ($v_d_max <> 0){
	$v_d_max = 5;
}else{
	$v_d_max = $v_d_max;
}
	
//Adiciona um valor em quantidade de dias para uma data 
//digitada pelo usuário
$data_soma = mktime($hora, $minuto, $segundo, $datai_explode['1'], $datai_explode['0'] + $v_d_max, $datai_explode['2']);

echo "Data inicial após timestamp: ".date('d-m-y', $ts_ini)."<BR>";
echo "Data final após timestamp: ".date('d-m-y', $ts_fim)."<BR>";
echo "Data soma após timestamp: ".date('d-m-y', $data_soma)."<BR>";

//Faz a checagem para ver se a data digitada pelo usuário 
//ultrapassou o limite
if ($ts_fim > $data_soma){
	echo "A data Fim não pode ultrapassar ".$v_d_max." dias!";
	echo "<BR>";
	echo "Você tem certeza que a data fim ".date('d-m-y', $ts_fim)." foi digitada corretamente.";
	echo "<BR>";
	echo "Em caso positivo confirme a operação clicando no link abaixo:";
	echo "<BR>";
	echo "<a href=\"$PHP_SELF?v_d_max=0&data_ini=".$_GET['data1']."&data_fim=".$_GET['data2'].">Confirmar</a>";
	exit;
}else{
	echo "Data Fim validada com sucesso.";
	echo "<BR>";
}
?>

Comentários:

Nenhum comentário foi enviado ainda.

Novo Comentário:

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