Validate date for anyone over 18 with jQuery

前端 未结 6 2086
借酒劲吻你
借酒劲吻你 2021-01-18 03:07

I have a form on my site that should validate for anyone who is over 18.

var day = $(\"#dobDay\").val();
var month = $(\"#dobMonth\").val();
var year = $(\"         


        
相关标签:
6条回答
  • 2021-01-18 03:47

    check this DEMO

    var day = 12;
    var month = 12;
    var year = 2006;
    var age = 18;
    var setDate = new Date(year + age, month - 1, day);
    var currdate = new Date();
    
    if (currdate >= setDate) {
      // you are above 18
      alert("above 18");
    } else {
      alert("below 18");
    }

    0 讨论(0)
  • 2021-01-18 03:48

    18 year old validation rule for jQuery Validator plugin using addMethod function.

    jQuery.validator.addMethod(
            "validDOB",
            function(value, element) {              
                var from = value.split(" "); // DD MM YYYY
                // var from = value.split("/"); // DD/MM/YYYY
    
                var day = from[0];
                var month = from[1];
                var year = from[2];
                var age = 18;
    
                var mydate = new Date();
                mydate.setFullYear(year, month-1, day);
    
                var currdate = new Date();
                var setDate = new Date();
    
                setDate.setFullYear(mydate.getFullYear() + age, month-1, day);
    
                if ((currdate - setDate) > 0){
                    return true;
                }else{
                    return false;
                }
            },
            "Sorry, you must be 18 years of age to apply"
        );
    

    and

    $('#myForm')
            .validate({
                rules : {
                    myDOB : {
                        validDOB : true
                    }
                }
            });
    
    0 讨论(0)
  • 2021-01-18 03:53

    Here is a somewhat lighter version that I tested:

    var day = 1;
    var month = 1;
    var year = 1999;
    var age = 18;
    
    var cutOffDate = new Date(year + age, month, day);
    
    if (cutOffDate > Date.now()) {
        $('output').val("Get Outta Here!");
    } else {
        $('output').val("Works for me!");
    }
    

    The key is to add the minimum age to the birthdate and confirm that it is before the current date. You are checking if the current date minus the minimum age (basically the latest birthdate allowed) was greater than than the birthdate provided, which will give you the reverse.

    0 讨论(0)
  • 2021-01-18 03:54

    if it's working the opposite way have you tried swapping the > for a < on the second to last line?

    0 讨论(0)
  • 2021-01-18 04:00

    I think it will be easier to understand if we rename the variables

    mydate => givenDate
    currdate => thresholdDate

    if givenDate > thresholdDate => you are not 18
    else => you are 18

    i.e.

    if ( givenDate > thresholdDate ){
        // you are not 18
    }
    

    i.e

    if ((givenDate - thresholdDate) > 0){
        // you are not 18
    }
    

    i.e.

    if ((mydate - currdate ) > 0){
        // you are not 18
    }
    
    0 讨论(0)
  • 2021-01-18 04:14
    var day = $("#dobDay").val();
    var month = $("#dobMonth").val();
    var year = $("#dobYear").val();
    var age =  18;
    
    var mydate = new Date();
    mydate.setFullYear(year, month-1, day);
    
    var currdate = new Date();
    currdate.setFullYear(currdate.getFullYear() - age);
    
    if(currdate < mydate)
    {
        alert('You must be at least 18 years of age.');
    }
    
    0 讨论(0)
提交回复
热议问题