2017-06-03 111 views
0

我制作了一个反应组件,其中包含出生日期输入和年龄输入,以年,月和日作为输入。获取出生日期的逻辑从年龄表示出生日期月和日

所以我想要得到人的出生日期,如果年龄键入。

例如, 年龄是年= 24个月= 1天= 15 因此诞生之日起应18-04-1993 ..

这是我到目前为止已经做了..但逻辑是打破如果(现在< = ageDay)块..

const now = new Date(); 
const nowDay = now.getDate(); 
const nowMonth = now.getMonth() + 1; 
const nowYear = now.getFullYear(); 
const ageYear = ReactDOM.findDOMNode(this.yearInput).value; 
const ageMonth = ReactDOM.findDOMNode(this.monthInput).value; 
const ageDay = ReactDOM.findDOMNode(this.daysInput).value; 
let dobYear = nowYear - ageYear; 
let dobMonth = nowMonth - ageMonth; 
let dobDay = nowDay - ageDay; 
if (dobMonth <= 0) { 
    dobYear --; 
    dobMonth = (12 + dobMonth); 
} 
if (ageMonth > 12) { 
    dobYear = dobYear + Math.floor(dobMonth/12); 
    console.log('ASIJASOIJAS', dobYear); // eslint-disable-line 
    dobMonth = ageMonth % 12; 
} 
if (nowDay <= ageDay) { 
    dobMonth -= Math.floor(ageDay/30); 
    dobDay = ageDay % 30; 
    if (dobMonth < 0) { 
    dobYear = dobYear - (dobMonth % 12) - 1; 
    dobMonth = 12 - (dobMonth % 12); 
    dobDay ++; 
    } 
} 
const age = { 
    days: ageDay, 
    months: ageMonth, 
    years: ageYear, 
}; 
const month = dobMonth < 10 ? `0${dobMonth}` : dobMonth; 
const day = dobDay < 10 ? `0${dobDay}` : dobDay; 
dateOfBirth = `${dobYear}-${month}-${day}`; 

在此先感谢。

+3

看,有时人们不喜欢图书馆,它不是一个答案你的问题(因此评论),但检查[momentjs](http://momentjs.com/),这是一个很棒的图书馆,处理各种时间问题,包括你现在拥有的。强烈推荐! –

+0

同意Brett East。你不需要重新发明轮子。 Moment JS完美地解决了这些问题。 – Nisarg

+0

@布雷特东..谢谢你的建议..我会检查出来..我忽略它的原因是因为Momentjs是大型图书馆,我的小应用程序只需要这个计算完成。所以包括 那整个图书馆只是一小部分是不必要的我觉得..猜我错了.. – JiN

回答

1

如果你不想使用momentjs如上面的评论中所建议的那样,一个简单的函数可能会这样做。需要注意的是它返回一个Date对象,所以你必须把它格式化成任何字符串格式,你想进去。

const getBirthDateFromAge = (ageYears, ageMonths, ageDays) => { 
 
    const date = new Date(); 
 
    date.setFullYear(date.getFullYear() - ageYears); 
 
    date.setMonth(date.getMonth() - ageMonths); 
 
    date.setDate(date.getDate() - ageDays); 
 
    return date; 
 
}; 
 

 
console.log(getBirthDateFromAge(10, 9, 4));