如何确认某人从出生之日起年满18岁?

时间:2011-08-17 10:12:58

标签: javascript asp.net

我正在对司机的出生日期进行验证,它应该是当前日期的最低值。

var Dates = $get('<%=ui_txtDOB.ClientID %>');   
var Split = Dates.value.split("/");

if (parseInt(Split[2]) > 1993) 
{
    alert("DOB year should be less than 1993");
    Dates.focus();
    return false;
}  

我正在使用上面的JavaScript验证来检查18岁以上的人的DOB,但这是不正确的。我需要查看今天的日期,它应该在18以上。我如何比较和检查当前日期?

7 个答案:

答案 0 :(得分:12)

我认为更好的选择是计算用户的年龄,并在if语句中使用它。

请参阅以下有关如何做到这一点的答案:

Calculate age in JavaScript

答案 1 :(得分:7)

试试这个。

var enteredValue = $get('<%=ui_txtDOB.ClientID %>');;
var enteredAge = getAge(enteredValue.value);
if( enteredAge > 18 ) {
    alert("DOB not valid");
    enteredValue.focus();
    return false;
}

使用此功能。

function getAge(DOB) {
    var today = new Date();
    var birthDate = new Date(DOB);
    var age = today.getFullYear() - birthDate.getFullYear();
    var m = today.getMonth() - birthDate.getMonth();
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
        age--;
    }    
    return age;
}

在这里演示:http://jsfiddle.net/codeandcloud/n33RJ/

答案 2 :(得分:2)

<script>


    function dobValidate(birth) {


        var today = new Date();
        var nowyear = today.getFullYear();
        var nowmonth = today.getMonth();
        var nowday = today.getDate();
        var b = document.getElementById('<%=TextBox2.ClientID%>').value;



        var birth = new Date(b);

        var birthyear = birth.getFullYear();
        var birthmonth = birth.getMonth();
        var birthday = birth.getDate();

        var age = nowyear - birthyear;
        var age_month = nowmonth - birthmonth;
        var age_day = nowday - birthday;


        if (age > 100) {
            alert("Age cannot be more than 100 Years.Please enter correct age")
            return false;
        }
        if (age_month < 0 || (age_month == 0 && age_day < 0)) {
            age = parseInt(age) - 1;


        }
        if ((age == 18 && age_month <= 0 && age_day <= 0) || age < 18) {
            alert("Age should be more than 18 years.Please enter a valid Date of Birth");
            return false;
        }
    }



</script>

答案 3 :(得分:1)

let TODAY = new Date(Date.now());
let EIGHTEEN_YEARS_BACK = new Date(new Date(TODAY).getDate() + "/" + new Date(TODAY).getMonth() + "/" + (new Date(TODAY).getFullYear() - 18));
let USER_INPUT = new Date("2003/12/13");
// Validate Now
let result = EIGHTEEN_YEARS_BACK > USER_INPUT // true if over 18, false if less than 18

我认为这是最接近的检查方法。

答案 4 :(得分:0)

在查看了各种方法之后,我决定最简单的方法是将日期编码为8位整数。然后,您可以从DOB代码中减去今天的代码,并检查它是否大于或等于180000。

function isOverEighteen(year, month, day) {
  var now = parseInt(new Date().toISOString().slice(0, 10).replace(/-/g, ''));
  var dob = year * 10000 + month * 100 + day * 1; // Coerces strings to integers

  return now - dob > 180000;
}

答案 5 :(得分:0)

const isOver18 = (year, month, day) => {

    const nowDate = new Date();
    nowDate.setFullYear(nowDate.getFullYear() - 18) // nowDate set before 18 years

    return nowDate >= new Date(year, month - 1, day);
}


console.log(isOver18(1995, 4, 18))

答案 6 :(得分:0)

我的方法是查找距今天18年前(或任意数字)的日期,然后查看该日期是否比其日期晚(更大)。通过将所有值设置为日期对象,可以轻松进行比较。

function is_of_age(dob, age) {
  // dates are all converted to date objects
  var my_dob = new Date(dob);
  var today = new Date();
  var max_dob = new Date(today.getFullYear() - age, today.getMonth(), today.getDate());
  return max_dob.getTime() > my_dob.getTime();
}

由于Date对象可以解析各种格式的字符串,因此您不必太担心dob的来源。只需调用is_of_age(“ 1980/12/4”,18);或is_of_age(“ 2005-04-17”,13);或基本上可以解析为Date参数的任何字符串格式或数字。