日期验证-如何绕过Javascript';自动更正日期?

日期验证-如何绕过Javascript';自动更正日期?,javascript,jquery,validation,date,Javascript,Jquery,Validation,Date,我想通过Javascript验证日期,并找到了一个很好的答案: 但是,当我尝试使用它来验证日期时,似乎Javascript通过获取最接近的有效日期来自动更正我的日期。因此,这将返回true,即使2014-11-31不是有效日期(Javascript月份从0开始,因此10等于11月): 函数isValidDate(d){ if(Object.prototype.toString.call(d)!=“[对象日期]”) 返回false; return!isNaN(d.getTime()); } v

我想通过
Javascript
验证日期,并找到了一个很好的答案:

但是,当我尝试使用它来验证日期时,似乎
Javascript
通过获取最接近的有效日期来自动更正我的日期。因此,这将返回
true
,即使
2014-11-31
不是有效日期(
Javascript
月份从
0
开始,因此
10
等于11月):

函数isValidDate(d){
if(Object.prototype.toString.call(d)!=“[对象日期]”)
返回false;
return!isNaN(d.getTime());
}
var测试日期=新日期(2014年10月31日);
控制台日志(测试日期);

控制台日志(isValidDate(测试日期))在JavaScript中处理日期时,我是Moment.js的忠实粉丝。正如您在这里看到的,他们在验证日期方面做得很好:


说到用JavaScript处理日期,我非常喜欢Moment.js。正如您在这里看到的,他们在验证日期方面做得很好:


可以使用日期对象中的自动更正来验证日期。只需对照日期对象中的内容检查输入:

var y=2014,m=10,d=31;
var测试日期=新日期(y、m、d);
var有效=
测试日期。getFullYear()==y&&
测试日期。getMonth()==m&&
test_date.getDate()==d;

文件。书写(有效)您可以使用日期对象中的自动更正来验证日期。只需对照日期对象中的内容检查输入:

var y=2014,m=10,d=31;
var测试日期=新日期(y、m、d);
var有效=
测试日期。getFullYear()==y&&
测试日期。getMonth()==m&&
test_date.getDate()==d;

文件。书写(有效)这是我不久前编写的一个函数,它演示了Guffa的解决方案

    function isValidDate(checkDate) {
    if(!/\d\d\/\d\d\/\d\d\d\d/.test(checkDate)) {
            return false; // checkDate is not formatted as ##/##/####
        } else {
            // split checkDate into three pieces
            var strMM = checkDate.split('/')[0];
            var strDD = checkDate.split('/')[1];
            var strYYYY = checkDate.split('/')[2];

            // create new Date() object from split pieces
            var strDateCheck = new Date(strYYYY,(strMM - 1),strDD); 

            // evaluate each piece of resulting date object against each corresponding piece of checkDate
            if(((strDateCheck.getMonth() + 1) == strMM) && (strDateCheck.getDate() == strDD) && (strDateCheck.getFullYear() == strYYYY)) {
                /* if you wish, add additional validation constraints here */
                return true; // all three pieces match exactly
            } else {
                return false; // at least one piece did not match
            }
        }
    }

这是我不久前写的一个函数,它演示了Guffa的解决方案

    function isValidDate(checkDate) {
    if(!/\d\d\/\d\d\/\d\d\d\d/.test(checkDate)) {
            return false; // checkDate is not formatted as ##/##/####
        } else {
            // split checkDate into three pieces
            var strMM = checkDate.split('/')[0];
            var strDD = checkDate.split('/')[1];
            var strYYYY = checkDate.split('/')[2];

            // create new Date() object from split pieces
            var strDateCheck = new Date(strYYYY,(strMM - 1),strDD); 

            // evaluate each piece of resulting date object against each corresponding piece of checkDate
            if(((strDateCheck.getMonth() + 1) == strMM) && (strDateCheck.getDate() == strDD) && (strDateCheck.getFullYear() == strYYYY)) {
                /* if you wish, add additional validation constraints here */
                return true; // all three pieces match exactly
            } else {
                return false; // at least one piece did not match
            }
        }
    }

哦,谢谢。这实际上是一个很酷的解决方案。“如果javascript决定更改我的日期,那一定是错误的”:)哦,谢谢。这实际上是一个很酷的解决方案。“如果javascript决定更改我的日期,那一定是错误的”:)谢谢。我将尝试这个库,但我有点想把我的工作限制在
jQuery
和纯
Javascript
。谢谢。我将尝试这个库,但我有点想把我的工作限制在
jQuery
和纯
Javascript