gpt4 book ai didi

javascript - 在 JavaScript 中传递错误日期时不抛出异常

转载 作者:行者123 更新时间:2023-12-02 14:12:10 25 4
gpt4 key购买 nike

我试图检查日期(MM/dd/yyyy 格式)是否是 JavaScript 中的有效日期。但当传递错误的日期时,它无法区分。我使用以下逻辑来检查它是否是有效日期。

var dt = document.forms["registerForm"]["dateOfBirth"].value;
try{
var d = new Date(dt);
alert(d);
}catch(err){
alert("not a valid date");
return false;
}

虽然出生日期是“02/47/2016”,但它不会进入异常 block ,而是将“02/47/2016”解释为 Fri Mar 18 2016 00:00:00 GMT+0530 (IST) 。但是当我尝试使用“02/03/2016”时,它正确解释为 Wed Feb 03 2016 00:00:00 GMT+0530 (IST)。

最佳答案

Date 构造函数获取日期值,并将该天数减去 1 与该月的第一天相加,这解释了您获得的结果日期。

使用像 momentjs 这样的库可以让处理日期变得更加容易,但是如果您想在不使用其他库的情况下完成此操作,那么您可以使用下面的函数。如果 Date 构造函数返回一个日期对象,此函数会将该日期格式化回字符串,并将其与原始输入进行比较。如果它们不匹配,函数将返回undefined,就像发生异常时一样。如果它们匹配,则返回日期对象:

function getDate(d) {
function formatDate(d) {
return [d.getMonth() + 1, d.getDate(), d.getFullYear()]
.map( n => (n < 10 ? '0' : '') + n ).join('/');
}
try {
var d = new Date(dt);
if (formatDate(d) != dt) return; // invalid
return d;
}
catch(err){}
}

var dt = '02/47/2016';
console.log(dt, getDate(dt) !== undefined);
var dt = '02/03/2016';
console.log(dt, getDate(dt) !== undefined);

关于javascript - 在 JavaScript 中传递错误日期时不抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39438245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com