Ir para conteúdo

POWERED BY:

Arquivado

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

cabralia

Calcular idade em uma função

Recommended Posts

pessoal estou com um problema que não consigo resolver. já tentei pesquisar a net mas tudo que acho não to conseguindo adaptar. é o seguinte tenho tres campos para data sendo dia mes e ano. quero pegar a soma do mês e o dia atual e diminuir a soma do mês e dia do formulário. se o primeiro for menor diminuo 1 na diferença do ano atual para o ano de nascimento e caso contrário não diminuo o 1 para poder calcular a idade certa em anos. não tô conseguindo passar o mês e dia do formulário. consigo calcular o mês e dia atual nessa condição e consigo calcular mês e dia do formulário se for fora da condição if mas dentro da condição if não tá dando. o resultado dá undefined para a variável idade.

 

se comento as linhas da condição com barras (//) e coloco a forma abaixo retorna o cálculo correto

var idade = (parseInt(parseInt(new Date().getMonth()+1+new Date().getDate()))

 

a forma abaixo retorna undefined

(parseInt(document.cadastro.mes.value)+parseInt(document.cadastro.dia.value))

 

se coloco essa forma que retorna undefined em um alert retorna o cálculo correto tambem. Só na condição if de cálculo de anos que não funciona.

 

quando tento comparar em um alert funciona certinho retornando false ou true dependo a combinação com a forma abaixo

(parseInt(parseInt(new Date().getMonth()+1+new Date().getDate()))<((parseInt(document.cadastro.mes.value)+parseInt(document.cadastro.dia.value))))

 

veja parte da função abaixo

 

 

<script type="text/javascript" charset="iso-8859-1">


{
if((parseInt(parseInt(new Date().getMonth()+1+new Date().getDate()))<((parseInt(document.cadastro.mes.value)+parseInt(document.cadastro.dia.value)))))
{
var idade = ((parseInt(new Date().getFullYear())-(parseInt(document.cadastro.ano.value))-1));
}
else
var idade = ((parseInt(new Date().getFullYear())-(parseInt(document.cadastro.ano.value))));
}


function validaCampo()
{
if(idade<18)
{
alert("Você precisa ser maior de idade para fazer compras nessa loja");
document.cadastro.anoNasc.focus();
return false;
}
else
...


</script>

 

já tentei fazer conversões de strings para inteiros e vice versa e versa vice de novo mas nada.
se puderem analisar e sugerir alguma mudança agradesco muito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui fazer de outro jeito um pouco diferente. aninhei um if na parte da verificação para isso. ficou assim

 

 

...
else
if((parseInt(parseInt(new Date().getMonth()+1+new Date().getDate()))<((parseInt(document.cadastro.mes.value)+parseInt(document.cadastro.dia.value))))){if((parseInt(new Date().getFullYear())-(parseInt(document.cadastro.ano.value))-1)<18){
alert("Você precisa ser maior de idade para fazer compras nessa loja.");
document.cadastro.dia.focus();
return false;
}
}
else
if((parseInt(new Date().getFullYear())-(parseInt(document.cadastro.ano.value)))<18){
alert("Você precisa ser maior de idade para fazer compras nessa loja.");
document.cadastro.dia.focus();
return false;
}
else
...

 

pode nao ser nenhuma coca cola mas ta funfando de boa :coolio:

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu ainda queria saber porque que do outro jeito não funciona. e só não funciona quando tento usar o valor de um campo do formulário. alguem sabe me dizer o porque? eu tentei declarando variaveis para receber os valores e depois passar eles para a condição if, tentei com e sem var e nada fez funfar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

depende de onde está essa tua tag script.

 

vc não consegue acessar o DOM antes do objeto q vc está procurando estar pronto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas é estranho porque os dois modos que tentei estão no mesmo bloco de código. eu só alterei a posição dentro do bloco. o segundo modo funciona e o primeiro não. esse bloco está na seção head. a intenção era validar a idade em uma condição if separada para apenas chamar a variável e verificar se era maior que 18 ou não, conforme mencionai no primeiro post. como não deu certo mudei para a forma do segundo post e deu certo. mas do jeito do primeiro ia ficar mais enxuto eu acho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não é estranho não cara.. veja, vc moveu para dentro da função, ne?!

 

ai o DOM já existe, e dá certo. O ponto é qndo vc executa a função e qndo o código estava sendo executado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então mas eu havia tentado esse bloco if logo depois da função e não deu certo o uso da variável. quando clicava no botão de submit o js não validava nada. tava assim

 

 

<script type="text/javascript" charset="iso-8859-1">
function validaCampo()

{
if((parseInt(parseInt(new Date().getMonth()+1+new Date().getDate()))<((parseInt(document.cadastro.mes.value)+parseInt(document.cadastro.dia.value)))))
{
var idade = ((parseInt(new Date().getFullYear())-(parseInt(document.cadastro.ano.value))-1));
}
else
var idade = ((parseInt(new Date().getFullYear())-(parseInt(document.cadastro.ano.value))));
}


{
if(idade<18)
{
alert("Você precisa ser maior de idade para fazer compras nessa loja");
document.cadastro.anoNasc.focus();
return false;
}
else
...

</script>

 

a meu ver essa seria a forma correta mas não funcionou... tambem tentei retirando a chave { acima de if(idade<18). em todos os casos não reconhece os campos do formulário. mas como tá funcionando do outro jeito, tá bom hehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Cabrália! Eu tenho uma aplicação em PHP na qual uso algo semelhante. Vou deixar abaixo parte dos códigos que utilizo na página de chamada e na página do download, um pouco adaptado para os seus campos:

 

Página que envia os parâmetros:

 

 

echo "<center><table width='400' cellpadding='4' style='align:center;border-style:fixed;border:4px solid;background-color:gold;border-color:navy;border-collapse:collapse;'>";
while($row = mysql_fetch_array($nlinhas))
{
echo "<tr style='border:1px solid;border-color:navy;font-family:verdana;font-size:16px;font-weight:bold;'><td width='60' style='border:0px solid;border-color:navy;font-family:verdana;font-size:20px;'>";
echo "
<script type='text/javascript' src='http://j.maxmind.com/app/geoip.js'>
</script>
<script>
document.write('<a href=downarquivos.php?arquivo=" . $row['Arquivo'] . ".jpg&cidade=' + geoip_city().replace(' ',';') + '&estado=' + geoip_region_name().replace(' ',';') + '&pais=' + geoip_country_name().replace(' ',';')  + '><img src=" . $row['Arquivo'] . ".jpg width=60 height=60>');
</script>
</td>";
echo "<td>Título: <i><font color='red'>" . $row['Titulo'] . "</font></i><br>Ano de lançamento: <i><font color='red'>" . $row['Ano'] . "</font></i><br>Downloads: <i><font color='red'>" . number_format($row['Quantidade'],0,",",".") . "</font></i>";
echo "</td></tr>";
}
echo "</table></center>";

 

Página que recebe os parâmetros e dispara o download:

      $Arquivo = $_GET["arquivo"];
      $Cidade = str_replace(";", " ", $_GET["cidade"]);
      $Estado = str_replace(";", " ", $_GET["estado"]);
      $Pais = str_replace(";", " ", $_GET["pais"]);

 

Observe que na parte do JavaScript eu converto os espaços dos nomes da cidade, do estado e do país em ponto e vírgula utilizando a função Replace() e na página que dispara o download eu volto ponto e vírgula para espaços novamente utilizando a função str_replace() do PHP. Isso porque dependendo do charset configurado ou dependendo dele não estar configurado, a linha do link com os parâmetros irá até achar o primeiro espaço e será interrompida. Por exemplo, se a cidade for Rio de Janeiro , a linha do parâmetro ficará assim:

 

 

http://localhost/vcssistemas/lorenaerafaela/downarquivos.php?arquivo=lorena_e_rafaela_cd01.jpg&cidade=Rio

 

ao invés de ser:

 

 

http://localhost/vcssistemas/lorenaerafaela/downarquivos.php?arquivo=lorena_e_rafaela_cd01.jpg&cidade=Rio de Janeiro&estado=Rio de Janeiro&pais=Brazil

 

Alterando esses detalhes, fica assim:

 

 

http://localhost/vcssistemas/lorenaerafaela/downarquivos.php?arquivo=lorena_e_rafaela_cd01.jpg&cidade=Rio;de;Janeiro&estado=Rio;de;Janeiro&pais=Brazil

 

No PHP transformamos ponto e vírgula em espaços novamente.

 

Os blocos acima eu retirei como exemplo do site de Lorena e Rafaela, o qual sou administrador, e fiz algumas adaptações para se aproximar da sua dúvida, por isso os nomes de cd e das cantoras.

 

Se quiser ver o esquema em funcionamento, acesse o site www.lorenaerafaela.com.br e clique em "BAIXE OS CDS" no menu superior.

 

Espero que ajude.

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.