因此,我需要通过从用户输入的输入字段的转换日期中减去“今天”日期来计算年龄。尽管它需要清理,下面的代码工作,我必须发挥创意为RN使用不同的JS执行环境......看到这里。
我的问题是,没有在此代码段“ b.getMonth()+ 1”中添加“ +1”,那么每次对日期进行减法运算都会减少1个月。当我添加“ +1”时,它就像一个超级按钮,为什么呢?如果这是合乎逻辑的解决方法,那么我不介意保留“ +1”,但是我当然想知道为什么“ +1”是必要的。
另外,完全可以使用改进的解决方案来解决此问题,请记住,我有一个简单得多的函数,在调试器打开时效果很好,关闭调试器后不起作用,请参见上面的链接。
getVerifyBirthday(birthday) {
const b = new Date();
var verify = birthday.length;
const utc2 = Date.UTC(b.getFullYear(), b.getMonth() + 1, b.getDate());
if (verify === 10) {
const splitBirth = birthday.split('-');
var mydate = new Date(splitBirth[2], splitBirth[0], splitBirth[1]);
const a = mydate;
const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
const diffTime = Math.abs(utc2 - utc1);
const diffYears = (diffTime / (3.15576e+10));
this.setState({ diffYears: diffYears});
return diffYears >= 13;
} else {}
}
更新资料
我最终重构了我的原始函数,由于月份从0开始,所以(+1)保留在月份上,如下所述。我仍然不得不拆分两个日期,当我不拆分两个日期时,我的年龄又回到了NaN / Undefined;不知道这是否可以追溯到RN执行环境与浏览器,但我离题了。
我会在这里提出一些自己的建议:
mm-dd-yyyy
日期字符串即可将Date
其转换为,它可以由new Date()
对我来说,将日期字符串分解成几天,几个月和几年,并根据整年的差异减去1年(如果该人今年尚未庆祝生日)做出决定,这更有意义:
const today = new Date().toISOString().slice(0,10), // yyyy-mm-dd
birthday = '1982-06-21',
[bYear, bMonth, bDay] = birthday.split('-'),
[tYear, tMonth, tDay] = today.split('-'),
diffYears = tYear - bYear - (bMonth > tMonth || bDay > tDay ? 1 : 0)
console.log(diffYears)
.as-console-wrapper{min-height:100%;}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句