Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Adriano..sousa

Validar Data com php

Recommended Posts

Amigos,

Estou precisando validar umas datas.

 

tipo o limite para inserir dados de um mês anterior é dia 02 do mês seguinte.

tipo eu so posso inserir dados do mês de janeiro ate o dia 02 de fevereiro

e assim por diante.

 

dai não tenho ideia como calcula isso, será que vcs poderiam me ajudar?

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize a biblioteca DateTime e a boa e velha matemática.

 

Vou dar um exemplo bem simples, veja se consegue adaptar a sua solução:

//Data atual
$dataAtual = new DateTime();

//Reserva de duas variáveis com a mesma data. O clone é utilizado para não criar referências entre os objetos e sim duplicá-los.
$dataLimite = clone $dataInsercao = new DateTime('2013-01-20');

//Adiciono um mês a data de inserção
$dataLimite->add(new DateInterval('P1M'));

//recrio a data de inserção, para o mês seguinte no dia 02
$dataLimite = new DateTime($dataLimite->format('Y-m-02'));

//faço a pura e simples verificação
if($dataLimite >= $dataAtual) {
   echo 'inclusão permitida';
} else {
   echo 'prazo finalizado';
}

A data inserção, seria a data referente ao assunto/dado que você iria cadastrar. A data atual e data limite, são para conferência, se está dentro do período permitido.

 

 

Saída:

 

Prazo finalizado

 

Caso você altere essa linha para qualquer data do mês de fevereiro:

$dataLimite = clone $dataInsercao = new DateTime('2013-02-01');

A saída será:

 

inclusão permitida

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não posso lhe entregar tudo pronto. Considere o primeiro exemplo um "brinde", pois não é um exemplo fácil de encontrar pela internet. Eu sou um que brigo, e muito, à favor do uso da biblioteca DateTime.

 

Com os exemplos aqui postados e a leitura do manual. Você tem o necessário para fazê-lo.

 

Tente fazer, e poste suas dúvidas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não posso lhe entregar tudo pronto. Considere o primeiro exemplo um "brinde", pois não é um exemplo fácil de encontrar pela internet. Eu sou um que brigo, e muito, à favor do uso da biblioteca DateTime.

 

Com os exemplos aqui postados e a leitura do manual. Você tem o necessário para fazê-lo.

 

Tente fazer, e poste suas dúvidas.

 

Minha duvido é como crio a logica com a data limite

tipo

 

//aki eu passo uma data que seria a data escolhida para incluir

$DT = "31/01/2013";

//sepado dia, mes e ano
$DTE =  explode("/", $DT);
$dia = $DTE[0];
$mes = $DTE[1];
$ano = $DTE[2];




//pego mes e ano atual 
$mesAtual = date("m");
$anoAtual = date("y");


//aki que nao sei pra onde ir com a data limite sendo dia 02 de casa mês
if ($anoAtual != $ano){
echo mb_convert_encoding ("<p><b><font size='2' face='Arial' color='#FF0000'>OBS.: Data invalida para inclusão. ano diferente do atual</font></b></p>", "UTF-8");
       echo "<Iframe src='/Aprora WEB/php/Preenchimento.php' width='797' height='200' frameborder='0' scrolling='auto' name='myFrame'></Iframe>";
  
       exit;

}

if ($mesAtual-$mes > 1){

echo mb_convert_encoding ("<p><b><font size='2' face='Arial' color='#FF0000'>OBS.: Data invalida para inclusão. Mês superiar ao prazo</font></b></p>", "UTF-8");
       echo "<Iframe src='/Aprora WEB/php/Preenchimento.php' width='797' height='200' frameborder='0' scrolling='auto' name='myFrame'></Iframe>";
  
       exit;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

No exemplo que eu postei, faz exatamente o que você quer fazer, basta utilizar a sua data.

$DT = "31/01/2013";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Filho, tem como você LER o que está sendo proposto? Ao invés de querer o negócio pronto e feito na mão??

Em momento algum foi usado explode. Foram ao total 5 linhas de código e UMA verificação lógica! Tudo comentadinho. É só ler um pouco e deixar de ser preguiçoso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

No exemplo que eu postei, faz exatamente o que você quer fazer, basta utilizar a sua data.

$DT = "31/01/2013";

 

Meu HEROI !!! hehehe

acho q conseguir

saca aew !!!

 

$DT = "2013-02-25";

//Data atual
$dataAtual = new DateTime();

//Reserva de duas variáveis com a mesma data. O clone é utilizado para não criar referências entre os objetos e sim duplicá-los.
$dataLimite = clone $dataInsercao = new DateTime($DT);

//Adiciono um mês a data de inserção
$dataLimite->add(new DateInterval('P1M'));

//recrio a data de inserção, para o mês seguinte no dia 02
$dataLimite = new DateTime($dataLimite->format('Y-m-02'));

//faço a pura e simples verificação
if($dataLimite <= $dataAtual) {
  echo mb_convert_encoding ("<p><b><font size='2' face='Arial' color='#FF0000'>OBS.: Data invalida para inclusão. prazo da data ultrapassado.</font></b></p>", "UTF-8");
       echo "<Iframe src='/Aprora WEB/php/Preenchimento.php' width='797' height='200' frameborder='0' scrolling='auto' name='myFrame'></Iframe>";
  
       exit;

} 

 

$DT = "2013-02-25";
 
//Data atual
$dataAtual = new DateTime();
 
//Reserva de duas variáveis com a mesma data. O clone é utilizado para não criar referências entre os objetos e sim duplicá-los.
$dataLimite = clone $dataInsercao = new DateTime($DT);
 
//Adiciono um mês a data de inserção
$dataLimite->add(new DateInterval('P1M'));
 
//recrio a data de inserção, para o mês seguinte no dia 02
$dataLimite = new DateTime($dataLimite->format('Y-m-02'));
 
//faço a pura e simples verificação
if($dataLimite <= $dataAtual) {
  echo mb_convert_encoding ("<p><b><font size='2' face='Arial' color='#FF0000'>OBS.: Data invalida para inclusão. prazo da data ultrapassado.</font></b></p>", "UTF-8");
       echo "<Iframe src='/Aprora WEB/php/Preenchimento.php' width='797' height='200' frameborder='0' scrolling='auto' name='myFrame'></Iframe>";
  
       exit;
 
}

 

dando erro ainda

num to acertando !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique o formato da data, está tudo explicado no manual.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja olhei
mas num ajudou muito
to voando como passar a data limite
pq esse q vc me ajudou ele so deixa
ate o dia 28 do mes anterior

estou com problemas na hora de comparar as datas

$DT = '2012-12-31';
$DataLimit = date_create(date('Y-m-02'));

date_add($DataLimit, date_interval_create_from_date_string('-32 days'));
$DataL =  date_format($DataLimit, 'y-m-d');
 
 $DataLimite = date('Y-m-d', strtotime($DataL));
 
echo $DataLimite."<br>";
 
echo $DT ;
 
//aqui não entra no laço de modo algum, como posso corrigir isso ?
if($DataLimite < $DF){
 
echo mb_convert_encoding ("<p><b><font size='2' face='Arial' color='#FF0000'>OBS.: Data Limite para inclusã ultrapassou os 30 dias.</font></b></p>", "UTF-8");
       echo "<Iframe src='/Aprora WEB/php/Preenchimento.php' width='797' height='200' frameborder='0' scrolling='auto' name='myFrame'></Iframe>";
  
       exit;
 
}else {
 
echo "erro !!!!!!!!!!!!!!!!!!!!!!!";
 
}

 

RESOLVIDO !!!!

 

$DT = '2012-12-31';
$DataLimit = date_create(date('Y-m-02'));
 
date_add($DataLimit, date_interval_create_from_date_string('-32 days'));
$DataL =  date_format($DataLimit, 'y-m-d');
 
 $DataLimite = date('Y-m-d', strtotime($DataL));
 
$I= strtotime($DataLimite);
$II = strtotime($DT);
 
if($I > $II){
 
echo mb_convert_encoding ("<p><b><font size='2' face='Arial' color='#FF0000'>OBS.: Data Limite para inclusão ultrapassou os 30 dias.</font></b></p>", "UTF-8");
       echo "<Iframe src='/Aprora WEB/php/Preenchimento.php' width='797' height='200' frameborder='0' scrolling='auto' name='myFrame'></Iframe>";
  
       exit;
 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você explicou direito, você tem apenas duas verificações a fazer:

 

Se o mês de inserção é igual ao mês vigente ou

Se o dia de hoje é entre 1 e 2 do mês seguinte ao de inserção

 

 

$hoje = new DateTime();
$insercao = new DateTime('2012-12-31');
 
$diferenca_meses = $hoje->format('m') - $insercao->format('m');
 
// Primeiro teste, se é o mês vigente
!$diferenca_meses
 
// Segundo teste, se é mês passado e hoje é até dia 02
$diferenca_meses === 1 and $hoje->format('d') == 2

 

Melhor que isso, só se eu fizesse pra você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sou um que brigo, e muito, à favor do uso da biblioteca DateTime.

Op! Somos dois!

 

Passei só pra parabenizar a grande sacada do clone ali. :clap:

 

E, claro, fazer a faxina no tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.