Javascript 有没有办法防止JS中的日期对象溢出天/月?
我有一个程序,它以dd.mm.yyyy格式从用户输入中获取日期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];
但是,如果输入了错误的日期,例如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年)
)我倾向于防御性编程……有很多问题的答案都很好。有很多问题的答案都很好。