javascript - 更改时在输入字段中显示年龄

标签 javascript

我有 2 个 HTML 字段,分别称为出生日期和年龄。

有一个计算年龄的按钮。现在我想在不按下按钮的情况下计算这个年龄。当我在出生日期字段中输入完内容后,它应该会自动显示年龄。如何使用 JavaScript 做到这一点?

<tr>
<td>Birth Date</td>
<td><input type="text" name="birth_date" id="datepicke" value="" maxlength="11" 
placeholder="birth date" /></td>
</tr>
<tr>
<td>Age</td>
<td>
<button type="button" onclick="displayDate()">Display Difference</button>
<p id="demo" style="vertical-align: top">

<input type="text" name="age" value="" maxlength="3"  placeholder="age" /></td>
</tr>

<script>
        function displayDate() 
        {
            var dof = document.getElementById('datepicke').value;
            var d1 = new Date(dof); //from date yyyy-MM-dd
            var d2 = new Date(); //to date yyyy-MM-dd (taken currentdate)
            var Months = d2.getMonth() - d1.getMonth();
            var Years = d2.getFullYear() - d1.getFullYear();
            var Days = d2.getDate() - d1.getDate();
            Months = (d2.getMonth() + 12 * d2.getFullYear()) - 
                    (d1.getMonth() + 12 * d1.getFullYear());
            var MonthOverflow = 0;
            if (Months - (Years * 12) < 0)
                MonthOverFlow = -1;
            else
                MonthOverFlow = 1;
            if (MonthOverFlow < 0)
                Years = Years - 1; Months = Months - (Years * 12);
            var LastDayOfMonth = new Date(d2.getFullYear(), 
                    d2.getMonth() + 1, 0, 23, 59, 59);
            LastDayOfMonth = LastDayOfMonth.getDate();
            if (MonthOverFlow < 0 && (d1.getDate() > d2.getDate())) {
                Days = LastDayOfMonth + (d2.getDate() - d1.getDate()) - 1;
            }
            else
                Days = d2.getDate() - d1.getDate();
            if (Days < 0)
                Months = Months - 1;
            var l = new Date(d2.getFullYear(), d2.getMonth(), 0);
            var l1 = new Date(d1.getFullYear(), d1.getMonth() + 1, 0);
            if (Days < 0) 
            {
                if (l1 > l)
                    Days = l1.getDate() + Days;
                else
                    Days = l.getDate() + Days;
            }
            document.getElementById("demo").innerHTML = Years + 
            " Year(s)";
            //, " + Months + " Month(s), " + Days + "Day(s
        }
</script>

更新:

<tr>
<td>Birth Date</td>
<td><input onblur="displayDate()" type="text" name="birth_date" id="datepicke" value="" 
maxlength="11" placeholder="birth date" /></td>
</tr>
<tr>
<td>Age</td>
<td><input type="text" name="age" id="age" value="" maxlength="3"  placeholder="age" /></td>
</tr> 

Javascript代码:

<script>
    function displayDate() 
    {
        var dof = document.getElementById('datepicke').value;
        var d1 = new Date(dof); //from date yyyy-MM-dd
        var d2 = new Date(); //to date yyyy-MM-dd (taken currentdate)
        var Months = d2.getMonth() - d1.getMonth();
        var Years = d2.getFullYear() - d1.getFullYear();
        var Days = d2.getDate() - d1.getDate();
        Months = (d2.getMonth() + 12 * d2.getFullYear()) - 
                (d1.getMonth() + 12 * d1.getFullYear());
        var MonthOverflow = 0;
        if (Months - (Years * 12) < 0)
            MonthOverFlow = -1;
        else
            MonthOverFlow = 1;
        if (MonthOverFlow < 0)
            Years = Years - 1; Months = Months - (Years * 12);
        var LastDayOfMonth = new Date(d2.getFullYear(), 
                d2.getMonth() + 1, 0, 23, 59, 59);
        LastDayOfMonth = LastDayOfMonth.getDate();
        if (MonthOverFlow < 0 && (d1.getDate() > d2.getDate())) {
            Days = LastDayOfMonth + (d2.getDate() - d1.getDate()) - 1;
        }
        else
            Days = d2.getDate() - d1.getDate();
        if (Days < 0)
            Months = Months - 1;
        var l = new Date(d2.getFullYear(), d2.getMonth(), 0);
        var l1 = new Date(d1.getFullYear(), d1.getMonth() + 1, 0);
        if (Days < 0) 
        {
            if (l1 > l)
                Days = l1.getDate() + Days;
            else
                Days = l.getDate() + Days;
        }
        document.getElementById("age").innerHTML = Years + 
        " Year(s)";
        //, " + Months + " Month(s), " + Days + "Day(s
    }
</script>

最佳答案

用作

 <input onchange="displayDate()" type="text" name="birth_date" id="datepicke" value="" maxlength="11" placeholder="birth date" />

关于javascript - 更改时在输入字段中显示年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25968040/

相关文章:

javascript - 创建带有幻灯片动画的 HTML5 交互式幻灯片

javascript - X-Requested-With header 未在 jquery ajaxForm 插件中设置

javascript - HTML5 视频 - 设置 video.currentTime 会破坏播放器

javascript - 什么时候使用 Yarn 而不是 NPM?有什么区别?

javascript - 为什么我无法使用普通方法访问同一域上的 iframe?

javascript - 在 JavaScript 中创建模型 (POJO)

javascript - 使用谷歌翻译自动翻译基于 URL 参数的网站

javascript - 将javascript数组发送到服务器

javascript - 使用 iMacros 向下滚动到页面底部

javascript - 如何更改输入字段的插入光标的外观?