使用momentJS计算年龄并获取不同的输出字符串

时间:2018-10-06 11:33:22

标签: javascript momentjs

这是我通过瞬间计算一个人的年龄的方法:

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

如何计算这些输出?

1 个答案:

答案 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%处理某些情况。