使用JavaScript验证日期中的年份

lrl1mhuk  于 2023-01-19  发布在  Java
关注(0)|答案(1)|浏览(167)

我想验证一个人的出生日期,但我一直在尝试找出如何使用诸如yyyy-mm-dd这样的ISO日期格式来检查出生年份是否有效。我想检查年份是否有效,然后使用年份的最后两位数。因此,我希望在验证年份后,格式为yy-mm-dd。
我已经检查了月份和日期,但我正在努力弄清楚如何验证2000年之前和之后的年份。这是我用于检查月份和日期的代码

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。

67up9zun

67up9zun1#

你为什么不直接使用内置的Date对象呢?它可以帮你处理大部分的边缘情况(包括二月,闰年等)。
但是,在传递给Date之前,我们需要修改输入,我将重用获取年、月和日的3行代码,只是我将首先使用Number(...)将它们转换为数字。
我们现在需要的唯一特殊逻辑是,如果2000 + year在今年 * 大于 *,那么它可能意味着是20世纪的一年,将正确的年、月和日与"-"连接起来,我们现在就有了一个yyyy-mm-dd形式的字符串,我们可以将它传递给Date。
最后,我们需要检查日期是否有意义,这可以通过检查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

相关问题