Javascript 基于矩js的DOB验证

Javascript 基于矩js的DOB验证,javascript,momentjs,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; } .......

我试图满足一种业务逻辑,在这种逻辑中,如果用户是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,当我希望日期为真时,它将验证日期为假。如果我将
diff()
中的最后一个参数更改为false,它将计算为100,但这也将计算为1/1/1919


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

不用计算经过的年数(这会给出分数结果),只需添加所需的年数并检查结果是否在范围内

// 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');

您试图计算到此处的距离的基准日期值到底是多少?听起来您可能只是对一天中不同时间的两个日期有问题…不确定您所说的基准日期值是什么意思,dateVal变量是用户输入的inI表示的另一个…如果您使用的只是
moment()
,这可能只是今天的日期,其小时/分钟/秒设置为“现在”是什么?因此,请使用当前日期,但将时间组件设置为
00:00:00
。您指定的格式(YYYY-MM-DD)与dateVal的格式不同,dateVal的格式为11/2/1919。尝试将格式更改为
MM/DD/YYYY
。以下代码适用于我
let dateVal='02/09/1919'let isValidDate=true;常数最大值=100;const years=moment().diff(moment(dateVal,'MM/DD/YYYY'),'years',true);console.log(年份>最大年龄);如果(年份>最大年龄){isValidDate=false;}