【发布时间】:2020-03-19 14:17:04
【问题描述】:
我有一个程序以 dd.mm.yyyy 格式从用户输入中获取日期。
但是,当输入错误的日期时,例如 30.02.2020,天数溢出并将月份设置为 3。我宁愿能够告诉用户该日期是不可能的。有没有办法在js中做到这一点?
【问题讨论】:
-
how to validate a date上有很多问题有很好的答案。
标签: javascript date
我有一个程序以 dd.mm.yyyy 格式从用户输入中获取日期。
但是,当输入错误的日期时,例如 30.02.2020,天数溢出并将月份设置为 3。我宁愿能够告诉用户该日期是不可能的。有没有办法在js中做到这一点?
【问题讨论】:
标签: javascript date
没有任何方法可以让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
}
}
【讨论】:
new Date(2020, 2, 365))我倾向于防御性编程......