我有一个程序,它从用户输入中获取日期,格式为dd.mm.yyyy。
但是,如果输入了错误的日期(例如30.02.2020),则日期会溢出,并将月份设置为3。我希望能够告诉用户该日期是不可能的。有没有办法在js中做到这一点?
答案 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
}
}