Javascript 有没有办法防止JS中的日期对象溢出天/月?

Javascript 有没有办法防止JS中的日期对象溢出天/月?,javascript,date,Javascript,Date,我有一个程序,它以dd.mm.yyyy格式从用户输入中获取日期 但是,如果输入了错误的日期,例如2020年2月30日,则天数会溢出,并将月份设置为3。我希望能够告诉用户这个日期是不可能的。在js中有没有办法做到这一点 没有任何方法可以让Date对象执行此操作,不。您必须在Date对象之外处理它 一种相当简单的方法是在施工后检查字段: const parts = /^(\d+)\.(\d+)\.(\d+)$/; if (parts) { const day = +parts[1];

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


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

没有任何方法可以让
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
    }
}
const parts=/^(?\d+)\(?\d+)\(?\d+)$/;
如有(部分){
const day=+parts.groups.day;
const month=+parts.groups.month-1;
const year=+parts.groups.year;
常数dt=新日期(年、月、日);
如果(dt.getFullYear()!==年| | dt.getMonth()!==月| | dt.g etDate()!==天){
//溢出
}
}

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

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

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
    }
}
const parts=/^(?\d+)\(?\d+)\(?\d+)$/;
如有(部分){
const day=+parts.groups.day;
const month=+parts.groups.month-1;
const year=+parts.groups.year;
常数dt=新日期(年、月、日);
如果(dt.getFullYear()!==年| | dt.getMonth()!==月| | dt.g etDate()!==天){
//溢出
}
}

真不敢相信我竟然没有想到这一点。谢谢,你会在几分钟内得到你的对勾!:)当然,您只需要检查月份是否因溢出而不同?如果日期或年份不同,则月份也会不同?@52d6c6af-仅当您将日期限制为两位数时。:-)(想想新的日期(2020年,2365年)
)我倾向于防御性编程……我不敢相信我没有想到这一点。谢谢,你会在几分钟内得到你的对勾!:)当然,您只需要检查月份是否因溢出而不同?如果日期或年份不同,则月份也会不同?@52d6c6af-仅当您将日期限制为两位数时。:-)(想想新的日期(2020年,2365年)
)我倾向于防御性编程……有很多问题的答案都很好。有很多问题的答案都很好。