Javascript 数据计算器有时出错

Javascript 数据计算器有时出错,javascript,date-arithmetic,Javascript,Date Arithmetic,我正在开发一个开源应用程序并让它运行,只是解决了一些问题,但我有点卡住了。有一个地方可以在键盘上计算并显示数据 输入和显示: <input type="date" class="input-small" name="dob" id="dob" onkeyup="showAge();" oninput="showAge();" required pattern="^[12]\d{3}-(0?[1-9]|1[0-2])-([012]?[0-9

我正在开发一个开源应用程序并让它运行,只是解决了一些问题,但我有点卡住了。有一个地方可以在键盘上计算并显示数据

输入和显示:

<input type="date" class="input-small" name="dob" id="dob"
             onkeyup="showAge();" oninput="showAge();" required
             pattern="^[12]\d{3}-(0?[1-9]|1[0-2])-([012]?[0-9]|3[01])$"
             data-validation-pattern-message="Must be a valid ISO8601 date."
            placeholder=<?php echo _("YYYY-MM-DD"); ?> 
            value="<?php echo $edata["dob"]; ?>"> 
            <span class="help-inline" id="age">Age: ?</span>

months+12
是不可操作的。似乎您打算对代码中的各种语句执行
if
语句。例如,除了:
months<0&&(年--,月+12)
你的意思是:
如果(月<0){years--;月+=12;}
。另外一点,如果这不仅仅是一个学习项目,你可能应该使用一个日期库。计算日期有很多复杂的边缘情况,你的算法无法捕捉其中任何一个。@Evantimboli-I“跳跃”到那个观察
function showAge(ind) {

      document.getElementById('age').innerHTML = "Age: "+
        getAge($('#dob').attr('value'));

  }

  function getAge(a) {
    a = new Date(Date.parse(a.replace(/-/g, "/")));
    var b = new Date, 
      years  = b.getYear () - a.getYear(),
      months = b.getMonth() - a.getMonth(),
      days   = b.getDate () - a.getDate();
    if (b <= a) return "Invalid DOB."
    months < 0 && (years --, months +  12);
    days   < 0 && (months--, days   += 31);
    months < 0 && (years --, months  = 11);

    a = [], b = function(b, c) {
      b > 0 && a.push(b + c + (b > 1 ? "s" : "")) }
    b(years , " year" );
    b(months, " month");
    b(days  , " day"  );
    a.length > 1 && (a[a.length - 1] = "and " + a[a.length - 1]);
    return(!a.length ? "0 days" : "" ) +
      a.join(a.length > 2 ? ", " : " ") + " old."
  }