使用javascript自动计算dob的年龄

时间:2017-08-02 11:36:05

标签: php forms mysqli dob

作为编程的新手,我需要您的帮助来构建一个小应用程序,该应用程序将使用php代码在下面的表单字段中自动计算dob的年龄!有没有办法实现这个目标?

我的HTML代码是:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>form practice</title>

</head>

<body>

    <div class="form2" id="form2" name="form2">

        <form action="php/form2.php" method="post" id="Personalinfo">

            <label for="fname">Name:</label>
            <input type="text" id="fname" name="firstname" placeholder="Client 
        Name..">

            <label for="lname">Lastname:</label>
            <input type="text" id="lname" name="lastname" placeholder="Client 
        Lastname..">

            <label for="dob">Birthday:</label>
            <input type="text" id="dob" name="dob" placeholder="yyyy/mm/dd..">

            <label for="age">Age:</label>
            <input type="text" id="age" name="age" placeholder="Client Age..">

            <input type="submit" name="submitForm2" value="Submit">

        </form>
    </div>

</body>

</html>

和我的php代码连接到mysqli数据库:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection

if ($conn->connect_error)
{
    die("Connection failed: " . $conn->connect_error);
}

if (isset($_POST['submitForm2']))
{
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];
    $dob = $_POST['dob'];
    $age = $_POST['age'];
    $sql = "INSERT INTO info (firstname, lastname, dob, age)
       VALUES ('{$firstname}', '{$lastname}', '{$dob}', '{$age}')";
    if ($conn->query($sql) === TRUE)
    {
        echo "New record created successfully";
    }
    else
    {
        echo "Error: " . $sql . "<br />" . $conn->error;
    }
}
else
{
    echo "Are you sure you enter a firstname and the name of your html submit 
       is submitForm";
}

$conn->close();
?>

我在互联网上搜索过,看过许多从dob计算年龄的例子,但我找不到任何相关内容,将结果嵌套在名为age的表单字段中,并且还将数据保存在数据库中。

3 个答案:

答案 0 :(得分:0)

您可以通过将天数除以365.25来获得年龄的良好近似值

我有充分的权威,今天有超过47岁的人 - 所以你不能使用PHP时间值存储他们的出生日期(如果你在32位系统上运行,你将有2038年后的问题)。因此我建议在数据库中进行数学运算。实际上,MySQL手册中的the very first example说明了这个确切的问题(并且这个方法不会受到除以365.25时创建的舍入偏移问题的影响):

SELECT name, birth, CURDATE(),
TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
FROM pet;

但是为什么要将年龄存储在数据库中呢?在将来的某个时候这将是错误的。如果您有出生日期,则可以在检索数据时进行计算。

答案 1 :(得分:0)

  • 1)您希望使用PHP DateTime类。你制作两个DateTime个对象,一个用于生日,一个用于现在,然后比较两个。

    假设我们不需要深入了解时区语言环境(这完全可能但超出了本Q&amp; A的范围),这将为您提供准确的结果。

    DateTime类示例:

    (PHP 5.6.29)

    $now =  new DateTime(); 
    
    // Note your SQL field should be a `DATE` column 
    // and formatted YYYY-MM-DD
    // assumed in this example $sqlData['dob'] = "2015-01-10";
    
    $birthday = new DateTime($sqlData['dob']);
    $age = $now->diff($birthday);
    //
    print "person is ".$age['y']." years old.";
    

    $ age的完整输出低于print_r($age)

    DateInterval Object
    (
        [y] => 2
        [m] => 6
        [d] => 23
        [h] => 5
        [i] => 34
        [s] => 11
        [days] => 935
     )
    
  • 2)正如Symcbean所提到的,你真的不需要(也可能不应该)将人的年龄添加到数据库中,如下所示:

      

    将来某些时候会出错。如果您有出生日期,则可以在检索数据时进行计算。

    - symcbean

  • 3)在PHP中使用面向对象的MySQL交互获得积极的评价;您仍然受到SQL注入和潜在的数据库滥用。您希望成为Using prepared statements and parameterized queries,而不是直接将PHP变量插入到SQL中。在你有机会学习任何糟糕的PHP习惯之前,立即行动吧!

来源:

答案 2 :(得分:-1)

有些朋友给出了我的答案的解决方案,但不幸的是有人必须删除它,所以我给出解决方案,因为我预防复制脚本!非常感谢你提供这个脚本!

    

<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>form practice</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>
    $(document).ready(function(){

        $("#dob").change(function(){
           var value = $("#dob").val();
            var dob = new Date(value);
            var today = new Date();
            var age = Math.floor((today-dob) / (365.25 * 24 * 60 * 60 * 1000));
            if(isNaN(age)) {

            // will set 0 when value will be NaN
             age=0;

            }
            else{
              age=age;
            }
            $('#age').val(age);

        });

    });
    </script>
</head>

<body>

<div class="form2" id="form2" name="form2">

<form action="php/form2.php" method="post" id="Personalinfo">

<label for="fname">Name:</label>
<input type="text" id="fname" name="firstname" placeholder="Client 
Name..">

<label for="lname">Lastname:</label>
<input type="text" id="lname" name="lastname" placeholder="Client 
Lastname..">

<label for="dob">Birthday:</label>
<input type="text" id="dob" name="dob" placeholder="yyyy/mm/dd..">

<label for="age">Age:</label>
<input type="text" id="age" name="age" placeholder="Client Age..">

<input type="submit" name="submitForm2" value="Submit">


</form>
</div>

</body>
</html>