【问题标题】:jquery calculating age based on dobjquery根据dob计算年龄
【发布时间】:2011-05-08 01:24:44
【问题描述】:

我有一个textfield,用户在其中输入mm/dd/yyyy 格式的出生日期。我想根据用户输入的出生日期为用户自动填充age 字段。

年龄textfield 应在用户跳出dob 字段时填充。

jQuery 的做法是什么?

【问题讨论】:

    标签: jquery html


    【解决方案1】:

    请参阅Calculate age in JavaScript 以了解计算适当处理闰年的年龄的函数。

    然后您可以使用该函数来计算用户的年龄,如下所示:

    var age = getAge(new Date($("#date").value()));
    

    .. 然后将年龄字段设置为该数字:

    $("#date").bind("blur", function() { $("#age").value(age) });
    

    【讨论】:

    • 已修复(有点懒惰;)
    【解决方案2】:
    function (row) 
    {
        var age = 0;
        var birthday = row["FechaNacimiento"];
    
        age = new Date().getFullYear() - birthday.getFullYear();
    
        if (new Date() < birthday.setFullYear(birthday.getFullYear() + age)) 
        {
            age--;
        }
    
        return age;
    }
    

    晚了,但这个工作...

    【讨论】:

      【解决方案3】:

      试试jquery.dates plugin

      var d = $("#mytextboxID").dateDiff("unit", date);
      

      【讨论】:

      • 这个插件看起来已经死了。该网站现已离线。
      【解决方案4】:

      这里我们通过开始和结束日期来测试它。您还可以使用它来计算以月和日为单位的年龄。

      var end = new Date(2015, 09, 02, 00, 0, 0, 0),
          begin = new Date(2015, 09, 1, 00, 0, 0, 0),
          e = new Date(end),
          b = new Date(begin),
          bMonth = b.getMonth(),
          bYear = b.getFullYear(),
          eYear = e.getFullYear(),
          eMonth = e.getMonth(),
          bDay = b.getDate(),
          eDay = e.getDate() + 1;
      
      if ((eMonth == 0) || (eMonth == 2) || (eMonth == 4) || (eMonth == 6) ||
          (eMonth == 7) || (eMonth == 9) || (eMonth == 11)) {
          var eDays = 31;
      }
      
      if ((eMonth == 3) || (eMonth == 5) || (eMonth == 8) || (eMonth == 10)) {
          var eDays = 30;
      }
      
      if (eMonth == 1 && ((eYear % 4 == 0) && (eYear % 100 != 0)) ||
          (eYear % 400 == 0)) {
          var eDays = 29;
      }
      
      if (eMonth == 1 && ((eYear % 4 != 0) || (eYear % 100 == 0))) {
          var eDays = 28;
      }
      
      if ((bMonth == 0) || (bMonth == 2) || (bMonth == 4) || (bMonth == 6) ||
          (bMonth == 7) || (bMonth == 9) || (bMonth == 11)) {
          var bDays = 31;
      }
      
      if ((bMonth == 3) || (bMonth == 5) || (bMonth == 8) || (bMonth == 10)) {
          var bDays = 30;
      }
      
      if (bMonth == 1 && ((bYear % 4 == 0) &&
              (bYear % 100 != 0)) || (bYear % 400 == 0)) {
          var bDays = 29;
      }
      
      if (bMonth == 1 && ((bYear % 4 != 0) || (bYear % 100 == 0))) {
          var bDays = 28;
      }
      
      var FirstMonthDiff = bDays - bDay + 1;
      
      if (eDay - bDay < 0) {
          eMonth = eMonth - 1;
          eDay = eDay + eDays;
      }
      
      var daysDiff = eDay - bDay;
      
      if (eMonth - bMonth < 0) {
          eYear = eYear - 1;
          eMonth = eMonth + 12;
      }
      
      var monthDiff = eMonth - bMonth,
          yearDiff = eYear - bYear;
      
      if (daysDiff == eDays) {
          daysDiff = 0;
          monthDiff = monthDiff + 1;
      
          if (monthDiff == 12) {
              monthDiff = 0;
              yearDiff = yearDiff + 1;
          }
      }
      
      if ((FirstMonthDiff != bDays) && (eDay - 1 == eDays)) {
          daysDiff = FirstMonthDiff;
      }
      console.log(yearDiff + " Year(s)" + " " +
          monthDiff + " month(s) " + daysDiff + " days(s)");    
      

      【讨论】:

        【解决方案5】:

        为此我想出了一个简单的解决方案。这是一个 jQuery change 函数,将值发送到输入年龄字段。

        $(document).ready(function() {
        
            $('#dob input').change(function() {
        
                var today = new Date();
                var dd = Number(today.getDate());
                var mm = Number(today.getMonth() + 1);
        
                var yyyy = Number(today.getFullYear());
        
                var myBD = $('#dob input').val();
                var myBDM = Number(myBD.split("/")[0])
                var myBDD = Number(myBD.split("/")[1])
                var myBDY = Number(myBD.split("/")[2])
                var age = yyyy - myBDY;
        
                if (mm < myBDM) {
                    age = age - 1;
                } else if (mm == myBDM && dd < myBDD) {
                    age = age - 1;
                }
        
                $('#age input').val(age);
            });
        
        });
        

        【讨论】:

          【解决方案6】:

          在您的文本框模糊时,您必须计算他们输入的内容与now() 之间的日期差。

          $('#birthdate').blur(function() {
              $("#ageTextBox").val(getAge(parseDate($('#birthdate').val())));
          });
          
          function getAge(birthDate) {
              var now = new Date();
          
              function isLeap(year) {
                  return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
              }
          
              // days since the birthdate    
              var days = Math.floor((now.getTime() - birthDate.getTime()) / 1000 / 60 / 60 / 24);
              var age = 0;
              // iterate the years
              for (var y = birthDate.getFullYear(); y <= now.getFullYear(); y++) {
                  var daysInYear = isLeap(y) ? 366 : 365;
                  if (days >= daysInYear) {
                      days -= daysInYear;
                      age++;
                      // increment the age only if there are available enough days for the year.
                  }
              }
              return age;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-10-08
            • 1970-01-01
            • 2022-01-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-10
            • 1970-01-01
            相关资源
            最近更新 更多