Ir para conteúdo
Fórum Script Brasil
  • 0

Data retornando valor errado


daviaer

Pergunta

Galera sou novo nesse tal de php...rsrsrs

Estou perdendo os cabelos por causa de um erro no cálculo de idade. Fiz um formulário em html e os scripts em php.

Algumas data retornam com a idade certa, no entanto, outras retornam um erro. Segue meu código

*** Formulário

<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Calcular o IMC</title>
</head>
<body>
 <form method="post" name="form_IMC" action="imc.php" >
    <fieldset>
        <legend>Descubrindo seu IMC</legend>
        <legend><h2><b>Informe seus dados</b></h2></legend>
        <label>Nome:</label> <input name="nome" type="text" size="40"/><p>
        <label>Data de nascimento: </label>
            <input type="date" maxlength="10" name="data" pattern="[0-9]{2}\/[0-9]{2}\/[0-9]{4}$" />
            <label>Sexo: </label>
            <select name="sexo">
                <option value="Masculino" />Masculino</option><br />
                <option value="Feminino" />Feminino</option><br />
            </select><p>
        <label>Peso (Kg): </label> <input type="text" name="peso" /><p>    
        <label>Altura (cm): </label> <input type="text" name="altura" /><p>
        <input type="submit" value="Enviar"/>
        <input type="reset" value="Limpar"/>
    </fieldset>
</form>
</body>
</html>

****PHP

<?php
    $nome = $_POST["nome"];
    $data = $_POST["data"];
    $sexo = $_POST["sexo"];
    $peso = $_POST["peso"];
    $altura = $_POST["altura"];
    $imc = $peso / (($altura/100)*($altura/100));

  

 //Calcula a idade    
    $date = new DateTime($data);
    $interval = $date->diff( new DateTime( ) );

    echo "Nome: $nome<br />";
    echo "Data de Nascimento: $data<br/ >";    
    echo "Sexo: $sexo<br />";
    echo "Peso(kg): $peso<br />";
    echo "Altura(cm): $altura<br />";
    echo "------------------------------<br />";
    echo "RESULTADO<br />";
    echo "------------------------------<br />";
    echo $interval->format( "Idade: %Y anos %m meses %d dias<br />");
    echo "Seu IMC é: $imc<br />";

    //Calcula o IMC    
    if($sexo == "Masculino"){
        if ($imc<20.7){
        echo "Situação: Abaixo do peso";

       } elseif ($imc>=20.7 && $imc<26.4) {
        echo "Situação: Peso normal";
        }elseif ($imc>=26.4 && $imc<27.8) {
        echo "Situação: Marginalmente acima do peso";
        }elseif ($imc>=27.8 && $imc<31.1) {
        echo "Situação: Acima do peso ideal";
        }else{
        echo "Situação: Obeso";
        }
    }else{
        if ($imc<19.1) {
        echo "Situação: Abaixo do peso";
        }elseif ($imc>=19.1 && $imc<25.8){
        echo "Situação: Peso normal";
        }elseif ($imc>=25.8 && $imc<27.3){
        echo "Situação: Marginalmente acima do peso";
        }elseif ($imc>=27.3 && $imc<32.3){
        echo "Situação: Acima do peso ideal";
        }else{
        echo "Situação: Obesa";
        }
    }
?>

 

Quando coloco por exemplo a data:  01/01/1985 ele retorna o valor correto: Idade: 30 anos 9 meses 8 dias

No entanto quando coloco 27/09/1985 ele retorna o seguinte erro:
Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (27/09/1984) at position 0 (2): Unexpected character' in C:\xampp\htdocs\projeto\ModuloIII\Unidade III\IMC\imc.php:12 Stack trace: #0 C:\xampp\htdocs\projeto\ModuloIII\Unidade III\IMC\imc.php(12): DateTime->__construct('27/09/1984') #1 {main} thrown in C:\xampp\htdocs\projeto\ModuloIII\Unidade III\IMC\imc.php on line 12

 

Alguém pode me ajudar????

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá!

Não dá pra saber qual é a linha 12, mas a mensagem de erro diz que a string: 27/09/1984 não foi entendida pelo __construct do método DateTime. Por quê você não tenta no padrão do php: 1984-09-27 ?

Link para o comentário
Compartilhar em outros sites

  • 0

Não entendi muito bem o que você quer, mas eu costumo calcular a idade de uma pessoa com o código abaixo:

          $data_br = $_POST["DiaNascimentoCandidatos"]."/".$_POST["MesNascimentoCandidatos"]."/".$_POST["AnoNascimentoCandidatos"];
		   sscanf($data_br, '%d/%d/%d', $dia, $mes, $ano);
           $hoje = getdate();
           $idade = $hoje['year'] - $ano;
           $dataAtual = date("Y/m/d");
          sscanf($dataAtual, '%d/%d/%d', $anoEnt, $mesEnt, $diaEnt);
		   if($mesEnt < $mes || ($mesEnt == $mes && $diaEnt < $dia)):
              $idade -= 1;
		     endif;
	
		$idadeCandidato = $idade;

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...