Reputation: 6735
I am looking for a solution to validate a date of birth field which is a text box I have using jQuery Masked Input to produce the format dd/mm/yyyy, and using the dateITA:true additional methods to validate that date format.
Now what I need is a solution that validates someones age is 18 or over to complete the form, the reason I am raising this question is because most solutions I see online apparently say these validations work but will eventually be off due to leap year's etc.
I am looking for a solution that validates age down to the day, not just the year or month, basically from today to exactly 18 years ago, as this is a very important feature required for my form.
Any suggestions or articles that could be linked would be much appreciated please,
I have already seen one on here such as the following:
But according to comments they do not end up being accurate long term, how do most professional sites do this correctly?
Upvotes: 2
Views: 6317
Reputation: 5156
I agree with the comment (but could not comment myself)
function validate(date){
var eightYearsAgo = momment().subtract("years", 18);
var birthday = moment(date);
if(!birthday.isValid()){
// INVALID DATE
}else if (eightYearsAgo.isAfter(birthday)){
// 18+
}else{
// < 18
}
}
Upvotes: 4
Reputation: 595
You can use moment.js lib and calculate the difference of birth date and the currently date
const date = '16/05/2001'; // Your date
const format = 'DD/MM/YYYY'; // Your date format
const resultFormat = 'years' // Result format (years, months, days)
const age = moment().diff(moment(date, format), resultFormat, true);
if (age >= 18){
console.log('Do what u want');
} else {
console.log('Come back later');
}
Upvotes: 0