JavaScript出生日期检查器不工作



不能正常工作;总是输出"高于16"我一直在推特if语句,但不能弄清楚。需要帮助,谢谢!

function hasDateCheck() {
let dateSpliter = document.querySelector("#dateOfBirth").value.split("-");
console.log(`${dateSpliter[0]} ${dateSpliter[1]} ${dateSpliter[2]}`); // YYYY MM DD
let today = new Date();
let dd = today.getDate();
let mm = today.getMonth();
mm++;
let yyyy = today.getFullYear();
if (yyyy - dateSpliter[0] < 16 && mm - dateSpliter[1] < 0 && dd - dateSpliter[2] < 0) {
console.log("below 16");
} else {
console.log("above 16");
}
}
document.querySelector("#submit").addEventListener("click", (e) => {
e.preventDefault();
hasDateCheck();
});
<input name="dateOfBirth" id="dateOfBirth" type="date" required/>
<input type="submit" id="submit" value="Submit" id="formSubmit">

您的if条件无效,

用这个替换你的if条件,

if (yyyy - dateSpliter[0] <= 16 && mm - dateSpliter[1] <= 0 && dd - dateSpliter[2] <= 0) {
console.log("below 16");
} else {
console.log("above 16");
}

如果你想计算年龄,那么参考@Aniket答案

使用此函数计算年龄

function age(birthday)
{
birthday = new Date(birthday);
return new Number((new Date().getTime() - birthday.getTime()) / 31536000000).toFixed(0);
}

如果可以导入包,请使用momentjs

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'years')

momentjs文档

if (yyyy - dateSpliter[0] > 16) {
console.log("above 16");
} else if (
yyyy - dateSpliter[0] == 16 &&
mm - dateSpliter[1] >= 0 &&
dd - dateSpliter[2] >= 0) 
{
console.log("above 16");
} else {
guardianDetailsCheck();
console.log("below 16");
}
}

您的条件是不正确的,因为,如果今天的日期是2021年1月15日,而您输入的是2000年1月1日,它会拒绝它,因为更小,即使大于16。

最简单的方法(使用较少的警告)是将其转换为Unix时间戳(表示自1970年1月1日以来经过的毫秒数),并以这种方式进行比较:

function hasDateCheck() {
const [YYYY, MM, DD] = document.querySelector("#dateOfBirth").value.split("-");
const birthDate = new Date(+YYYY, +MM - 1, +DD)
//                          year day   hour min  sec  millisec
if(Date.now() - birthDate < 16 * 365 * 24 * 60 * 60 * 1000) {
console.log("below 16");
} else {
console.log("above 16");
}
}
document.querySelector("#submit").addEventListener("click", (e) => {
e.preventDefault();
hasDateCheck();
});
<input name="dateOfBirth" id="dateOfBirth" type="date" required/>
<input type="submit" id="submit" value="Submit" id="formSubmit">

您可能会因为闰年而遇到问题(对于每个闰年,+/- 1天的误差)。您可以忽略这个问题(几天通常不会引起问题),实现更复杂的检查行为,或者通过在日期上增加4天来减少不准确性(在16年范围内大约有16 / 4 = 4个闰年):

function hasDateCheck() {
const [YYYY, MM, DD] = document.querySelector("#dateOfBirth").value.split("-");
const birthDate = new Date(+YYYY, +MM - 1, +DD)
//                           year day        hour min  sec  millisec
if(Date.now() - birthDate < (16 * 365 + 4) * 24 * 60 * 60 * 1000) {
console.log("below 16");
} else {
console.log("above 16");
}
}
document.querySelector("#submit").addEventListener("click", (e) => {
e.preventDefault();
hasDateCheck();
});
<input name="dateOfBirth" id="dateOfBirth" type="date" required/>
<input type="submit" id="submit" value="Submit" id="formSubmit">

最新更新