Javascript日期验证-将19(世纪)作为两位数日期的前缀

Javascript日期验证-将19(世纪)作为两位数日期的前缀,javascript,validation,date,Javascript,Validation,Date,我正在用Date()进行一些验证,我注意到,如果我用两位数的年份而不是四位数的Date(01/01/55)创建了一个无效的日期,那么当前世纪将以年份为前缀-55变为1955-而不是我可以用NaN测试的无效日期对象 这是一个问题,因为我允许用户输入没有任何“/”的日期,然后我使用substr创建日期: // Check date is in correct format var fDate = val.split('/');

我正在用
Date()
进行一些验证,我注意到,如果我用两位数的年份而不是四位数的
Date(01/01/55)
创建了一个无效的日期,那么当前世纪将以年份为前缀-55变为1955-而不是我可以用NaN测试的无效日期对象

这是一个问题,因为我允许用户输入没有任何“/”的日期,然后我使用
substr
创建日期:

            // Check date is in correct format
            var fDate = val.split('/');
            // Should have 3 parts
            if (fDate.length != 3) {
                var day = val.substr(0, 2);
                var month = val.substr(2, 2);
                var year = val.substr(4, 4);

                val = day + '/' + month + '/' + year;
                control.val(val);
            }

因此,如果用户输入
010155
我的逻辑将其转换为
01/01/55
,然后
Date()
创建日期
01/01/1955
,但我希望它创建一个无效的日期对象。

好吧,我开发了一个解决方案,它可以满足我的要求。momentjs.com似乎很棒,我可能也可以使用它,但我使用的是jqueryui.com日期选择器,它使用
日期
,我希望使用它可以输入没有年份的日期,1或2个数字年,默认为本世纪初

 var cYear = new Date().getFullYear();
                    var c = cYear.toString().substr(0, 2);

                    day = val.substr(0, 2);
                    if (day > 31) {
                        leftOverD = day.charAt(1);
                        day = "0" + day.charAt(0);
                    } else if (day.length == 1) {
                        day = "0" + day;
                    } else if (day.length == 0) {
                        day = "01";
                    }

                    month = (leftOverD) ? leftOverD + val.charAt(2) : val.substr(2, 2);
                    if (month > 12) {
                        leftOverM = month.charAt(1);
                        month = "0" + month.charAt(0);
                    } else if (month.length == 1) {
                        month = "0" + month;
                    } else if (month.length == 0) {
                        month = "01";
                    }

                    var strYear;
                    if (leftOverD && leftOverM) {
                        strYear = val.substr(2, 4);
                    } else if (leftOverD || leftOverM) {
                        strYear = val.substr(3, 4);
                    } else if (!leftOverD && !leftOverM) {
                        strYear = val.substr(4, 4);
                    }

                    year = strYear;
                    if (year.length == 0) {
                        year = c + "00";
                    } else if (year.length == 1) {
                        var nYear = c + '0' + year;
                        if (nYear > cYear)
                            nYear = (c - 1) + '0' + year

                        year = nYear;
                    } else if (year.length == 2) {
                        var nYear = c + year;
                        if (nYear > cYear)
                            nYear = (c - 1) + year

                        year = nYear;
                    }

在JS中处理日期是一场噩梦。为什么不简单地使用一个接受区域性的
Date()
构造函数呢?

您可能应该自己进行验证——不幸的是,浏览器处理非标准日期格式的方式存在不一致性。使用类似于