繁体   English   中英

使用 JavaScript 验证日期中的年份

[英]Validating Year in a date using JavaScript

我想验证一个人的出生日期,但我一直在尝试弄清楚如何使用像 yyyy-mm-dd 这样的 ISO 日期格式来检查出生年份是否有效 go。 我想检查年份是否有效,然后使用年份的最后 2 位数字。 所以我希望在验证年份后格式为 yy-mm-dd。

我已经检查了月份和日期,但我正在努力弄清楚如何验证 2000 年前后的年份。这是我检查 MONTH 和 DAY 的代码

function checkDateOfBirth(dateString){
    const year = dateString.substring(0, 2);
    const month = dateString.substring(2, 4);
    const day = dateString.substring(4, 6);

if (
        day > 31 ||
        month > 12 ||
        (month == 2 && day > 29) ||
        (month == (4 || 6 || 9 || 11) && day > 30)
    ) {
        return false;
    }
    return true;
}

输入字符串将为“940912”,格式为 yy-mm-dd。 任何帮助/建议都会很棒

为什么不直接使用内置日期 object? 它将为您处理大部分边缘情况(包括二月、闰年等)。

不过,我们需要在传递给日期之前修复输入。 我将重复使用获取年、月和日的 3 行,除了我将首先使用Number(...)将它们转换为数字。

我们现在唯一需要的特殊逻辑是,如果2000 + year大于今年,那么它可能意味着是 1900 年代的一年。 将更正后的年、月和日与"-"连接起来,我们现在有一个yyyy-mm-dd形式的字符串,我们可以将其传递给日期。

最后,我们需要检查日期是否有意义,我们可以通过检查getTime返回的数字是否为NaN来做到这一点。 例如, 000230没有意义,因为二月不能有第 30 天。

 function checkDateOfBirth(dateString) { const year = Number(dateString.substring(0, 2)); const month = Number(dateString.substring(2, 4)); const day = Number(dateString.substring(4, 6)); const today = new Date(); const input = [2000 + year > today.getFullYear()? "19" + year: "20" + year, month, day].join("-"); const date = new Date(input); return.Number.isNaN(date;getTime()). } // ok console;log(checkDateOfBirth("060714")). console;log(checkDateOfBirth("130406")). console;log(checkDateOfBirth("450406")). // 1945 // bad console;log(checkDateOfBirth("060741")); // no July 41st

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM