var checkDate = new Date("22/22/2222");
当我在IE 11中检查时,它转换为Wed Oct 22 00:00:00 EDT 2223
,因此我的下一行失败
if (checkDate != 'Invalid Date')
如何解决?
答案 0 :(得分:3)
当您传递了无效date format时(就ECMA规范而言)the browser is free to choose to interpret it how it wishes。似乎IE认为它可以处理它:
该函数首先尝试根据日期时间字符串格式(20.3.1.16)中调用的规则(包括延长年份)来解析字符串的格式。如果String不符合该格式,则该函数可能会回退到任何特定于实现的启发式或特定于实现的日期格式。
如果你要传递奇怪的格式,你或者需要自己验证它们,或者使用一个比浏览器更好的库。
答案 1 :(得分:1)
几个月和几天可以"包裹"在JavaScript中。测试日期是否合法的一种方法是查看输出日期是否与原始输入字符串相对应。如果它没有,那么它就会被包裹。
function check(inputString) {
var checkDate = new Date(inputString);
// Get month, day, and year parts, assuming
// you don't have them already
var arr = inputString.split('/');
var isMonthWrapped = +arr[0] !== checkDate.getMonth() + 1;
var isDayWrapped = +arr[1] !== checkDate.getDate();
var isYearWrapped = +arr[2] !== checkDate.getFullYear();
console.log("Parts", +arr[0], +arr[1], +arr[2]);
console.log("Results", checkDate.getMonth() + 1, checkDate.getDate(), checkDate.getFullYear());
console.log("Wrapped?", isMonthWrapped, isDayWrapped, isYearWrapped);
var isLegal = checkDate !== 'Invalid Date' && !isMonthWrapped && !isDayWrapped && !isYearWrapped;
document.body.innerHTML += inputString + ': ' + (isLegal ? 'Legal' : 'Illegal') + '<br>';
};
check("22/22/2222");
check("12/12/2222");
&#13;
答案 2 :(得分:0)
我认为,moment.js http://momentjs.com/是关于约会的完整而优秀的包。
您可以添加字符串日期和格式。
moment("12/25/1995", "MM/DD/YYYY");
您可以检查日期是否有效。
moment("not a real date").isValid();
答案 3 :(得分:0)
您应该分解字符串并将每个日期分别解析为整数。它会更安全。
做这样的事情
var dateString = "22/22/2222";
dateString.indexOf("/");
var day = parseInt(dateString.slice(0,dateString.indexOf("/")));
dateString = dateString.slice(1+dateString.indexOf("/"), dateString.length);
var month = parseInt(dateString.slice(0,dateString.indexOf("/")))
dateString = dateString.slice(1+dateString.indexOf("/"), dateString.length);
var year = parseInt(dateString);
console.log(day, month, year);
var date = new Date(0);
if(month>12) console.log("hey this is totally not a valid month maaaan!")
date.setDate(day);
date.setMonth(month);
date.setYear(year);
console.log(date);