这是我通过瞬间计算一个人的年龄的方法:
const age = moment().diff('1980-01-01', 'years', false)
但是由于我还需要获得儿童和婴儿的当前年龄,因此我需要获得以下四个示例的输出:
30 years // adults
1 year 2 months // for all <18 years
2 months 12 days // for all <1 year and > 1 month
20 days // for all <1 month
如何计算这些输出?
答案 0 :(得分:1)
这是一个可以为您完成的功能:
const pluralize = (str, n) => n > 1 ? `${n} ${str.concat('s')}` : n == 0 ? '' :`${n} ${str}`
const calcAge = (dob) => {
const age = moment.duration(moment().diff(moment(dob)))
const ageInYears = Math.floor(age.asYears())
const ageInMonths = Math.floor(age.asMonths())
const ageInDays = Math.floor(age.asDays())
if (age < 0)
throw 'DOB is in the future!'
let pluralYears = pluralize('year', ageInYears)
let pluralDays = pluralize('day', age.days())
if (ageInYears < 18) {
if (ageInYears >= 1) {
return `${pluralYears} ${pluralize('month', age.months())}`
} else if (ageInYears < 1 && ageInMonths >= 1) {
return `${pluralize('month', ageInMonths)} ${pluralDays}`
} else {
return pluralDays
}
} else {
return pluralYears
}
}
console.log(calcAge('2000-01-01')) // 18 Years
console.log(calcAge('2011-05-01')) // 7 years 5 months
console.log(calcAge('2015-10-01')) // 3 years
console.log(calcAge('2017-05-01')) // 1 year 5 months
console.log(calcAge('2018-09-01')) // 1 month 5 days
console.log(calcAge('2018-10-01')) // 6 days
console.log(calcAge('2018-07-07')) // 3 months
console.log(calcAge('2099-12-01')) // Uncaught DOB is in the future!
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
它依赖时刻,主要的是它在moment.diff中使用moment.duration。从那时起,它只是在正确的form
(意味着年/月/日)中获得了该持续时间的正确部分。
我尚未进行广泛的测试,因此请随意查看一下,看看它是否不能100%处理某些情况。