Luxon.js 获取现在和输入日期之间的年差
Luxon.js get difference between now and input date in years
我正在使用 luxon.js 并想检查一下,用户的年龄是否超过 21 岁。
我正在使用的代码
const isTooYoung = date =>
DateTime.fromFormat(date, 'dd.MM.yyyy')
.diffNow()
.as('years') < -21;
但今天 (18.11.2019) 两个电话:
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 岁?
持续时间单位之间的转换是有损的,因为年份的长度不尽相同,而且 Luxon "lost" 知道持续时间来自特定的时间跨度。文档中有一个关于此的部分: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/
我正在使用 luxon.js 并想检查一下,用户的年龄是否超过 21 岁。 我正在使用的代码
const isTooYoung = date =>
DateTime.fromFormat(date, 'dd.MM.yyyy')
.diffNow()
.as('years') < -21;
但今天 (18.11.2019) 两个电话:
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 岁?
持续时间单位之间的转换是有损的,因为年份的长度不尽相同,而且 Luxon "lost" 知道持续时间来自特定的时间跨度。文档中有一个关于此的部分: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/