【问题标题】:Getting age automatically when given Date of Birth给定出生日期后自动计算年龄
【发布时间】:2010-11-11 05:00:25
【问题描述】:

我想从一个人的出生日期得到他的年龄。我有一个 HTML 代码,我在其中使用 datepicker for dob,当我给出出生日期时,它会自动显示年龄而不提交。请帮助我找到解决方案。

<html>
    <head>
        <title>
            DOB calculations
        </title>
        <link rel='stylesheet' type='text/css' href='jquery-ui.css' />
        <script type='text/javascript' src='jquery.min.js'>
        </script>
        <script type='text/javascript' src='jquery-ui.min.js'>
        </script>
        <script type='text/javascript' src='jquery.js'>
        </script>
        <script type='text/javascript' src='jquery-ui-custom.js'>
        </script>
        <script type='text/javascript' src='jquery.ui.datepicker.js'>
        </script>
        <script type="text/javascript">
            $(function() {

                $('#datepicker').datepicker({
                    changeMonth: true,
                    changeYear: true,
                    dateFormat: 'mm/dd/yy',
                    //firstDay: 1,
                    onSelect: function(dateText, inst) {
                        dateText.split('/');
                        Bdate = new Date(dateText[2], dateText[0] - 1, dateText[1]);
                        BDateArr = ('' + Bdate).split(' ');
                        //document.getElementById('DOW').value = BDateArr[0]; 
                        Cdate = new Date;
                        CDateArr = ('' + Cdate).split(" ");
                        Age = CDateArr[3] - BDateArr[3];
                        document.getElementById('AGE').value = Age;
                        // DOBcalc(dateText); 
                        //DOBcalc(); 
                    }
                })

            });
        </script>
    </head>

    <body>
        <form>
            DOB (mm/dd/yyyy):
            <input type="text" id="datepicker" value=''>
            Age:
            <input id="AGE" type="text" value="">
        </form>
    </body>
</html>

【问题讨论】:

    标签: javascript jquery html jquery-ui


    【解决方案1】:

    您可以尝试将此函数用作您的 onSelect 事件处理程序:

    $('#dob').datepicker({
        onSelect: function(value, ui) {
            var today = new Date(),
                dob = new Date(value),
                age = new Date(today - dob).getFullYear() - 1970;
    
            $('#age').text(age);
        },
        maxDate: '+0d',
        yearRange: '1920:2010',
        changeMonth: true,
        changeYear: true
    });
    

    这应该非常准确(并且比我的旧代码好得多),因为所有内容都已移交给原生 Date 对象。

    在这里查看一个简单的演示:http://www.jsfiddle.net/yijiang/PHvYK/1

    【讨论】:

    • 如果日期格式为“dd/mm/yy”,则返回 17/06/1986 的 NaN
    【解决方案2】:
    function getAge(birth) {
       var today = new Date();
       var curr_date = today.getDate();
       var curr_month = today.getMonth() + 1;
       var curr_year = today.getFullYear();
    
       var pieces = birth.split('/');
       var birth_date = pieces[0];
       var birth_month = pieces[1];
       var birth_year = pieces[2];
    
       if (curr_month == birth_month && curr_date >= birth_date) return parseInt(curr_year-birth_year);
       if (curr_month == birth_month && curr_date < birth_date) return parseInt(curr_year-birth_year-1);
       if (curr_month > birth_month) return parseInt(curr_year-birth_year);
       if (curr_month < birth_month) return parseInt(curr_year-birth_year-1);
    }
    
    var age = getAge('18/01/2011');
    alert(age);
    

    【讨论】:

    • 如果您的日期格式与默认格式不同,这是一个很好的功能
    【解决方案3】:

    如果您在 javascript 中减去两个 Date 对象,您会得到它们以毫秒为单位的差异,因此 ( BDate - (new Date()) )/365.25/24/60/60/1000 会给您一个准确到一天内的年龄结果。 (即如果他们的生日是今天并且是闰年,那可能是不准确的)

    【讨论】:

      【解决方案4】:
          <script type="text/javascript">
              $(function() {
                  $('#dtp').datepicker({
                      changeMonth: true,
                      changeYear: true,
                      dateFormat: 'mm/dd/yy',
                      //firstDay: 1,
                      onSelect: function(dateText, inst) {
                          var d = new Date(Date.parse(inst.lastVal));
                          var diff = (new Date()).getFullYear() - d.getFullYear();
                          document.getElementById('AGE').value = diff;
                      }
                  });
              });
          </script>
      

      【讨论】:

      • 你需要给 var d = new Date((inst.input.val()));而不是 var d = new Date(Date.parse(inst.lastVal));正常工作
      【解决方案5】:

      试试这个代码很简单

      function agefinding()
          {
              var birthDay = document.getElementById("TxtDOB").value;
              var DOB = new Date(birthDay);
              var today = new Date();
              var age = today.getTime() - DOB.getTime();
              age = Math.floor(age / (1000 * 60 * 60 * 24 * 365.25));
             // alert(age);
              return age;
          }
      

      使用javascript查找年龄非常简单

      【讨论】:

        【解决方案6】:

        假设你正确构建 DOB,创建:

        now = Date() //right now
        

        使用 date.getTime() 函数以毫秒为单位获取时间。将它们的差异除以毫秒中的

        one_year = 1000*60*60*24*365;
        years = (now.getTime() - DOB.getTime())/one_year;
        

        将其放入任何日期字段的任何更改的回调中,并在您喜欢的任何地方显示结果。

        【讨论】:

        • 由于几个闰年,这会在几天内不同步 - 因为大多数人都超过 4 岁,365.25 会更准确(尽管仍然不完美)
        • 是的,我在提交后就注意到你的,好点。我听说能被 100 整除但不能被 400 整除的年份不是闰年,所以我猜 365+(1.0/4)-(1.0/100)+(1.0/400) = 365.2425 最好 =P
        • 当然仔细比较会更好,但是谁有时间呢?
        • 是的,但是有多少人是 100 岁以上的人?使用这个网站的许多人不太可能出生在 1901 年之前(1900 年是 365.25 平均值不成立的最后一年),我觉得这个代码也不太可能在 2100 年仍然使用(明年这条规则将获胜) t 举行 ;))
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-02
        • 2019-01-29
        相关资源
        最近更新 更多