我想根据一个人的出生日期计算他的年龄。
我知道可以通过
moment().diff(date_of_birth, 'months')
返回出生后的月数或年数。
我想返回更具体的东西,像这样:
23 days
(如果此人不到一个月大)或 2 months
或 1 year 2 months
我们可以用 Momentjs 做到这一点吗?
试试这个
let duration = moment.duration(moment().diff('1987-11-15'));
const formatDuration = (duration) => {
let years = duration.years();
let months= duration.months();
let days= duration.days();
let result = '';
if (years === 1) {
result += 'one year ';
} else if (years > 1) {
result += years + ' years ';
}
if (months === 1) {
result += 'one month ';
} else if (months > 1) {
result += months + ' months ';
}
if (days === 1) {
result += 'one day ';
} else if (days > 1) {
result += days + ' days ';
}
return result;
}
console.log('Your age is ', formatDuration(duration) );
// you may also try this.
duration.humanize();
使用
the third paramter=true
moment.diff
应该是一种选择。
默认情况下,moment#diff 会将结果截断为零小数 地方,返回一个整数。如果你想要一个浮点数, 将 true 作为第三个参数传递。 在 2.0.0 之前,moment#diff 返回了一个 数字四舍五入到最接近的整数,而不是截断的数字。
像下面的演示:
function displayAge(birth, target) {
let months = target.diff(birth, 'months', true)
let birthSpan = {year: Math.floor(months/12), month: Math.floor(months)%12, day: Math.round((months%1)*target.daysInMonth(),0)}
// you can adjust below logic as your requirements by yourself
if (birthSpan.year < 1 && birthSpan.month < 1) {
return birthSpan.day + ' day' + (birthSpan.day > 1 ? 's' : '')
} else if (birthSpan.year < 1) {
return birthSpan.month + ' month' + (birthSpan.month > 1 ? 's ' : ' ') + birthSpan.day + ' day' + (birthSpan.day > 1 ? 's' : '')
} else if (birthSpan.year < 2) {
return birthSpan.year + ' year' + (birthSpan.year > 1 ? 's ' : ' ') + birthSpan.month + ' month' + (birthSpan.month > 1 ? 's ' : '')
} else {
return birthSpan.year + ' year' + (birthSpan.year > 1 ? 's' : '')
}
}
let birth = moment([1997, 3, 7])
console.log(displayAge(birth, moment()))
console.log(displayAge(birth, moment([1997, 3, 8])))
console.log(displayAge(birth, moment([1997, 3, 10])))
console.log(displayAge(birth, moment([1997, 4, 8])))
console.log(displayAge(birth, moment([1998, 4, 8])))
console.log(displayAge(birth, moment([1998, 5, 8])))
console.log(displayAge(birth, moment([1999, 4, 8])))
<script src="https://momentjs.com/downloads/moment.js"></script>
Rainer plummer answer 的 TS 版本
const duration = moment.duration(moment().diff('1987-11-15'));
const formatDuration = (duration: moment.Duration) => {
const years = duration.years();
const months = duration.months();
const days = duration.days();
let result = '';
if (years === 1) {
result += 'one year ';
} else if (years > 1) {
result += years + ' years ';
}
if (months === 1) {
result += 'one month ';
} else if (months > 1) {
result += months + ' months ';
}
if (days === 1) {
result += 'one day ';
} else if (days > 1) {
result += days + ' days ';
}
return result;
};
console.log('Your age is ', formatDuration(duration));
// you may also try this.
duration.humanize();