Javascript 从出生日期计算年龄用户在react中的输入值

Javascript 从出生日期计算年龄用户在react中的输入值,javascript,html,reactjs,Javascript,Html,Reactjs,我正在尝试获取用户输入的出生日期值,并将其转换为等效年龄 在控制台中,显示获取的值,但未将其分配给状态变量dob1,执行年龄计算函数 stackblitz及其链接中提供了完整的代码: HTML 超过一定年龄的男性人数: JS handleChange\u年龄=(事件)=>{ log(“DOB:,event.target.value”); this.setState({dob1:event.target.value}) console.log(this.state.dob1); var age\

我正在尝试获取用户输入的出生日期值,并将其转换为等效年龄

在控制台中,显示获取的值,但未将其分配给状态变量
dob1
,执行年龄计算函数

stackblitz及其链接中提供了完整的代码:

HTML

超过一定年龄的男性人数:

JS

handleChange\u年龄=(事件)=>{
log(“DOB:,event.target.value”);
this.setState({dob1:event.target.value})
console.log(this.state.dob1);
var age\u latest={age\u latest:this.calculate\u age}
控制台日志(最新版本);
this.setState({age1:age_latest})
log(“年龄:”,this.state.age1);
}
计算年龄=(dob1)=>{
var today=新日期();
var birthDate=新日期(this.state.dob1);
var age_now=today.getFullYear()-birthDate.getFullYear();
var m=today.getMonth()-birthDate.getMonth();
如果(m<0 | |(m==0&&today.getDate()
首先,
setState
本质上是异步的。因此,如果您想让新设置的
状态
的值执行某些操作,请使用

其次,
calculate\u age
接受一个
dob
参数。您可以直接在
handleChange\u age
函数中使用它

这是修改后的代码

您的
calculate\u age
函数使用
dob1
参数而不是
this.state.dob1

calculate_age = (dob1) => {
    var today = new Date();
    var birthDate = new Date(dob1);  // create a date object directly from `dob1` argument
    var age_now = today.getFullYear() - birthDate.getFullYear();
    var m = today.getMonth() - birthDate.getMonth();
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) 
    {
        age_now--;
    }
    console.log(age_now);
    return age_now;
  }

另一个
calculate\u age
由于某种原因,mehamasum的函数不适用于我

const calculate_age = dob => {
  const birthDate = new Date(dob); 
  const difference = Date.now() - birthDate.getTime();
  const age = new Date(difference);

  return Math.abs(age.getUTCFullYear() - 1970);
}

非常感谢您的帮助…代码正在运行…您还可以为其他问题提供您的建议,在下面给出的链接中:当然,我会研究它:)如果这个解决方案对您有效,请。嘿,我接受了…您能帮我解决其他问题吗?我建议您使用momentJS。它完全适合你的场景。
calculate_age = (dob1) => {
    var today = new Date();
    var birthDate = new Date(dob1);  // create a date object directly from `dob1` argument
    var age_now = today.getFullYear() - birthDate.getFullYear();
    var m = today.getMonth() - birthDate.getMonth();
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) 
    {
        age_now--;
    }
    console.log(age_now);
    return age_now;
  }
handleChange_age = (event) => {
    console.log("DOB:", event.target.value);

    this.setState({ dob1: event.target.value }, () => {
      // example of setState callback
      // this will have the latest this.state.dob1
      console.log(this.state.dob1);
    })

    // call calculate_age with event.target.value
    var age_latest = {age_latest: this.calculate_age(event.target.value)}
    console.log(age_latest);

    this.setState({ age1: age_latest }, () => {
      // this will have the latest this.state.age1
      console.log("Age:", this.state.age1);
    })
  }
const calculate_age = dob => {
  const birthDate = new Date(dob); 
  const difference = Date.now() - birthDate.getTime();
  const age = new Date(difference);

  return Math.abs(age.getUTCFullYear() - 1970);
}