如何基于3个单独的输入使用Javascript检查用户的年龄

如何基于3个单独的输入使用Javascript检查用户的年龄,javascript,vue.js,ecmascript-6,ecmascript-5,Javascript,Vue.js,Ecmascript 6,Ecmascript 5,我有3个独立的输入,一个用于日、月和年。页面加载只需显示年份,用户只需先填写年份 目前,我可以通过简单地检查年份来检查某人是16岁以上还是16岁以下 checkAge() { let yearOfBirth = new Date().getFullYear() - this.form.dobYear; if (yearOfBirth > 16) { this.isSixteen = false; this.belowSixteen = false;

我有3个独立的输入,一个用于日、月和年。页面加载只需显示年份,用户只需先填写年份

目前,我可以通过简单地检查年份来检查某人是16岁以上还是16岁以下

checkAge() {
    let yearOfBirth = new Date().getFullYear() - this.form.dobYear;

    if (yearOfBirth > 16) {
      this.isSixteen = false;
      this.belowSixteen = false;
    }
}
当比较当前年份减去用户输入时,如果它等于16,那么我有两个select元素显示日期和月份,这两个元素都需要填写

在这里,我需要比较用户的输入,看看他们的年龄是否确实是16岁,如果他们离16岁生日还有几个月,例如,那么我希望他们被视为16岁以下,否则显示为16岁


如果有帮助的话,我也在使用BootstrapVue和Vue.js。

只检查年份:

function calculateYearDiff(y){ // birthday year
   return (new Date()).getUTCFullYear() - y;
}
^这将返回现在和给定年份之间的年差

要查看完整的生日日期:

function calculateAge(y,m,d){ // birthday year, month, day
   var birthday = new Date(y + '-' + m + '-' + d);
   var ageDifMs = Date.now() - birthday.getTime();
   var ageDate = new Date(ageDifMs);
   return Math.abs(ageDate.getUTCFullYear() - 1970);
}

^这将返回从给定生日到现在的完整年份。

仅检查年份:

function calculateYearDiff(y){ // birthday year
   return (new Date()).getUTCFullYear() - y;
}
^这将返回现在和给定年份之间的年差

要查看完整的生日日期:

function calculateAge(y,m,d){ // birthday year, month, day
   var birthday = new Date(y + '-' + m + '-' + d);
   var ageDifMs = Date.now() - birthday.getTime();
   var ageDate = new Date(ageDifMs);
   return Math.abs(ageDate.getUTCFullYear() - 1970);
}
^这将返回从给定生日到现在的整整一年。

获取当前日期

减少16年

base.setFullYear(base.getFullYear()-16);
根据用户输入创建日期对象

var birthday=new Date(y,m,d);
比较两者

if(birthday.getTime()<=base.getTime())
  // ok
else
  // not ok
函数检查事件{ var基数=新日期; res.innerText=它是+base; base.setFullYearbase.getFullYear-16; res.innerText+=\n16年前它是+base; var bday=event.target.valueAsDate; IFB日 res.innerText+=\n查询:+bday.getTime获取当前日期

减少16年

base.setFullYear(base.getFullYear()-16);
根据用户输入创建日期对象

var birthday=new Date(y,m,d);
比较两者

if(birthday.getTime()<=base.getTime())
  // ok
else
  // not ok
函数检查事件{ var基数=新日期; res.innerText=它是+base; base.setFullYearbase.getFullYear-16; res.innerText+=\n16年前它是+base; var bday=event.target.valueAsDate; IFB日
res.innerText+=\nvertict:+bday.gettimes自从用户第一次只提示应该手动填充其他字段的年份以来?例如假设january@NicolòCozzani不确定你的意思是什么,op说用户输入年、月、日可能我误解了op的意思,我认为用户应该先填写年输入,然后再填写其他:这是正确,用户应首先填写年份,然后根据年份,他们将显示日期和月份下拉列表。@NicolòCozzani@ImranR然后是一个月接着一天,或者一次是一年接着一个月接着一天?因为用户第一次只提示年份,所以他应该手动填充其他字段?例如假设january@NicolòCozzani不确定你是什么意思,op说用户输入年、月和日可能我误解了op的意思,我认为用户应该先填写年输入,然后再填写其他内容:没错,用户应该先填写年,然后根据这一点,他们将显示日期和月下拉列表。@NicolòCozzani@ImranR然后是月,然后是日或日一年接着一个月又一天?我刚试过这个,但是当我过了2003年12月30日生日时,它显示为2004年1月30日星期五,为什么日期和我过的不同@tevemadar@ImranR我的代码与生日无关,所以不清楚它为什么要修改它。相反,我怀疑您错过了getMonth和setM的部分这里不使用的是基于0的see docs,所以0是1月,11是12月,当它在/overflow下时,它是上一年/下一年,这就是为什么12是明年1月。所以不,你没有尝试这个。顺便说一句,添加了一个可运行的代码段。不仅仅是get/setMonth,而且月份通常是基于零的,请参阅关于的解释monthIndexI刚刚尝试过这个,但是当我过了2003年12月30日生日,它显示为2004年1月30日星期五,为什么日期和我过的不同@tevemadar@ImranR我的代码与生日无关,所以不清楚为什么要修改它。相反,我怀疑您错过了getMonth和setMonth这两个都不是u的部分这里的sed是基于0的see文档。因此0是1月,11是12月,当它在下/溢出时,它是上一年/下一年,这就是为什么12是明年1月。所以不,你没有尝试这个。顺便说一句,添加了一个可运行的代码段。不仅仅是get/setMonth,而且通常月份都是基于零的,请参阅monthIndex的解释