在jsp中拒绝将来的日期

时间:2016-08-29 06:24:05

标签: javascript date

我的html表单中有一个出生日期字段如下:

Date of Birth 
<input type="date" name="dob" id="dob" onchange="ageCalculation()"> 

在年龄计算功能中,我想拒绝未来的日期,年龄不应超过8年.javascript是:

function ageCalculation(){

       var currentDate = new Date();
    var birthDate = new Date(document.getElementById("dob").value);
    var difference = currentDate - birthDate;

    var differenceInYears = Math.floor(difference / (1000 * 60 * 60 * 24 * 365.25));
    if(birthDate.after(currentDate)|| differenceInYears>8)
        {
         window.alert("Age should be less than 8 years");
        }
    else{
    document.getElementById("age").value = differenceInYears ;}

       }

但是我得到了Uncaught TypeError:birthDate.after不是函数

在我的htnl表格的开头,我写了

<%@ page import="java.util.Date"%> 

2 个答案:

答案 0 :(得分:1)

而不是仅仅使用&#34;&lt;&#34;之后的比较。另外我修改了你的if子句。

&#13;
&#13;
function ageCalculation(){

  var currentDate = new Date();
  var val = document.getElementById("dob").value;
  var birthDate = new Date(val);
  var difference = currentDate - birthDate;
  
  var differenceInYears = Math.floor(difference / (1000 * 60 * 60 * 24 * 365.25));
  if(birthDate > currentDate) {
    window.alert("You cannot be born in the future");
  } else if( differenceInYears>8) {
    window.alert("Age should be less than 8 years");
  } else {
    document.getElementById("age").value = differenceInYears ;
  }
}
&#13;
<input type="date" name="dob" id="dob" onchange="ageCalculation()"> 
<input id="age"></input>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您有几个问题,首先,并非所有使用的浏览器都支持输入类型日期,因此您必须验证返回的值。您还应该提供输入日期的格式(在本例中为yyyy-mm-dd)。如果浏览器支持日期输入,则返回的值将是ISO 8601格式日期,如2016-08-30。

另一个问题是,如果使用Date构造函数来解析字符串(或使用Date.parse,它们等同于解析),它将被视为UTC。然后,时区效果可以创建日期不同的日期。这只会影响时区重叠的日期,但在该日期的某些时间会很烦人。

因此,您需要验证值是实际日期值并将字符串解析为本地。然后,您可以非常简单地通过在提供的出生日期增加8年并查看是否在今天之后进行年龄计算。如果是的话,那个人还不是8.否则,他们就是。

/* Check if birth date is more than 8 years
** ago. Result is written to form.result
** @param {DOMElement} el - form control
*/ 
function checkAge(el) {
  var dateString = el.form.birthDate.value;
  var d = parseISOLocal(dateString);
  var result;

  // Check date was valid
  if (isNaN(d)) {
    result = 'Invalid date';

  // Add 8 years to provided date and check if on or before today
  } else {
    d.setFullYear(d.getFullYear() + 8);
    if (d <= new Date()) {
      result = '8 years or older';
    } else {
      result = 'Under 8 years old';
    }
  }
  el.form.result.value = result;
}

/* Parse ISO 8601 format date as local
** @param {string} s - date string in format yyyy-mm-dd
** @returns {Date} from parsing string as a
** local date. If date has invalid values,
** an invalid Date is returned
*/
function parseISOLocal(s) {
  var b = s.split(/\D/);
  var d = new Date(b[0], --b[1], b[2]);
  return d && d.getMonth() == b[1]? d : new Date(NaN);
}
<form onsubmit="return false">
  Enter birthday (yyyy-mm-dd)<input type="date" name="birthDate" value="2008-08-31"><br>
  <input type="button" onclick="checkAge(this)" value="Check 8 or over">
  <input type="text" readonly name="result">
</form>