Jump to content
Fórum Script Brasil
  • 0

Data retornando valor errado


daviaer
 Share

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...