我有一个验证器,用于检查用户是否至少18岁。
这是检查:
var res = /^([1-2]\d{3})\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])\-([0-9]{4})$/.exec(str);
var todays_date = new Date();
var birth_date = null;
if (res != null) {
birth_date = new Date(res[1], res[2], res[3]);
if (todays_date - birth_date > 565633905872) {
565633905872
在{毫秒}内是18 years
,但如何将其转换为数年之前,我可以这样做:
if (todays_date - birth_date => 18) {
答案 0 :(得分:5)
您引用的数字不是 18年内的毫秒数。即使你假装没有闰年,它也太小了。
测试某人是否至少18岁的最简单方法是将日期对象初始化为他们的生日,然后使用.getFullYear()
和.setFullYear()
直接设置18年前的年份。然后将其与当前日期进行比较。
另请注意,在JS日期中,月份从零开始,因此您可能希望在创建日期对象时使用res[2] - 1
。
birth_date = new Date(res[1], res[2] - 1, res[3]);
birth_date.setFullYear(birth_date.getFullYear() + 18);
if (birth_date <= new Date()) {
或者假设您正在构建birth_date
来自个别年份,月份和日期,您可以这样做:
birthPlus18 = new Date(+res[1] + 18, res[2] - 1, res[3]);
if (birthPlus18 <= new Date()) {
(+
中的前导+res[1] + 18
不是一个拼写错误,它会将正则表达式提取的字符串转换为数字,以便您可以为其添加18。不需要对res[2] - 1
执行相同的操作,因为-
会自动转换两个操作数。)
另请注意,您的正则表达式会很乐意允许指定一个月份过高的日期,例如2月30日或6月31日。
答案 1 :(得分:3)
有更好的方法可以检查这个(请参阅“nnnnnn”的答案)。但你的问题并不是一个更好的方法,而是你如何能够转变为多年。
您可以编写一个功能,例如:
function convertmili( mSeconds )
{
return mSeconds / 31536000000;
}
此功能的输出仍远非理想,因为您的示例将输出: 17.9361334941654
所以我们可以稍微清理一下:
function convertmili( mSeconds )
{
var checkYear = Math.floor(mSeconds / 31536000000);
return checkYear;
}
使用此功能,您的示例将输出 17 ,然后您可以按照您想要的方式进行检查。
答案 2 :(得分:1)
将你的毫秒值除以31536000000你得到的年数