有没有一种方法可以防止JS中的Date对象溢出天/月?

时间:2020-03-19 14:17:04

标签: javascript date

我有一个程序,它从用户输入中获取日期,格式为dd.mm.yyyy。

但是,如果输入了错误的日期(例如30.02.2020),则日期会溢出,并将月份设置为3。我希望能够告诉用户该日期是不可能的。有没有办法在js中做到这一点?

1 个答案:

答案 0 :(得分:3)

没有任何方法可以使Date对象执行此操作,不会。您必须在Date对象之外处理它。

一种相当简单的方法是在构造后检查字段:

const parts = /^(\d+)\.(\d+)\.(\d+)$/;
if (parts) {
    const day = +parts[1];
    const month = +parts[2] - 1;
    const year = +parts[3];
    const dt = new Date(year, month, day);
    if (dt.getFullYear() !== year || dt.getMonth() !== month || dt.g etDate() !== day) {
        // overflow
    }
}

或者在具有命名捕获组的最新环境中:

const parts = /^(?<day>\d+)\.(?<month>\d+)\.(?<year>\d+)$/;
if (parts) {
    const day = +parts.groups.day;
    const month = +parts.groups.month - 1;
    const year = +parts.groups.year;
    const dt = new Date(year, month, day);
    if (dt.getFullYear() !== year || dt.getMonth() !== month || dt.g etDate() !== day) {
        // overflow
    }
}