javascript - Luxon.js 获取现在和输入日期之间的差异(以年为单位)

标签 javascript luxon

我正在使用 luxon.js 并想检查用户的年龄是否超过 21 岁。
代码,我正在使用它

const isTooYoung = date =>
  DateTime.fromFormat(date, 'dd.MM.yyyy')
    .diffNow()
    .as('years') < -21;

但是对于今天(2019 年 11 月 18 日)这两个电话:
console.log(isTooYoung('15.11.1998')); // true => incorrect
console.log(isTooYoung('20.11.1998')); // true => correct, this user is not 21 year old yet

fiddle :http://jsfiddle.net/zh4ub62j/1/

那么,什么是解决问题的正确方法来检查,用户的年龄是否超过 x 岁?

最佳答案

Duration 单位之间的转换是有损的,因为年的长度并不完全相同,并且 Luxon 已经“丢失”了持续时间来自特定时间跨度的知识。文档中有一个关于此的部分:https://moment.github.io/luxon/docs/manual/math.html#losing-information

幸运的是,解决方法很简单:只需在几年内做一次差异。然后 Luxon 将知道根据实际日历年进行数学计算:

// now is 27.11.2019

const isTooYoung = date =>
  luxon.DateTime.fromFormat(date, 'dd.MM.yyyy')
    .diffNow('years')
    .years < -21;

console.log(isTooYoung('15.11.1998'))
console.log(isTooYoung('30.11.1998'))

fiddle :http://jsfiddle.net/j8n7g4d6/

关于javascript - Luxon.js 获取现在和输入日期之间的差异(以年为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58913032/

相关文章:

node.js - 规则:不支持在没有 Luxon 的情况下使用 TZID

javascript - Luxon.js ISO 8601 解析

javascript - 如何将 Luxon 时区选项与 chart.js 合并?

javascript - 如何使用 Luxon 格式化日期?

javascript - Nestjs中的多注入(inject)

javascript - 在 jasmin 中使用测试 Angular 复选框

javascript - 在 asp.net 中重用 javascript 代码

angular - 如何在 Angular2 中使用 Luxon?

javascript - 通过 Javascript document.write 显示 HTML 表单?

javascript - 在表单项的类触发 jquery 更改函数后获取表单项的 id