首页 > 解决方案 > 有没有办法防止 JS 中的 Date 对象溢出天/月?

问题描述

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

但是,当输入错误的日期时,例如 30.02.2020,天数溢出并将月份设置为 3。我宁愿能够告诉用户该日期是不可能的。有没有办法在js中做到这一点?

标签: javascriptdate

解决方案


没有任何方法可以让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
    }
}

推荐阅读