时刻js的DOB验证

时间:2019-02-11 14:07:02

标签: javascript momentjs

我正在尝试满足一种业务逻辑,即验证用户是否小于或等于100岁。我使用矩js来基于DOB输入来计算差异年。以下是我的逻辑

let isValidDate = true;
const maxAge = 100;
const years = moment().diff(moment(dateVal, 'YYYY-MM-DD'), 'years', true);

if (years > maxAge) {
  isValidDate = false;
}
.......

根据当前的逻辑,我的值将返回一个浮点值。例如,如果我输入 11/2/1919 ,则返回100.003,当我希望日期为true时,它将验证日期为false。如果我将diff()中的最后一个参数更改为 false ,它将得出100,但是也会将 1/1919 得出100。

有没有更好的方法来处理此用例?

1 个答案:

答案 0 :(得分:2)

只需计算所需的年数并检查结果是否在范围内,而不是计算经过的年数(这可能会给您分数结果)。

// The birth date - be sure to parse in the same format you're expecting:
const dob = moment("11/2/1919", "D/M/YYYY");

// The constant number of years you don't want to exceed
const maxAge = 100;

//  Clone the dob (to not mutate it), increment by the years, and compare with day precision
const isValidDate = dob.clone().add(maxAge, 'years').isSameOrBefore(moment(), 'day');