用Javascript创建错误的日期

Nee*_*ets 3 javascript

我有一个看似无助的问题,我确信我错过了一些非常愚蠢的东西.我有以下Javascript函数验证日期:

function validateDate(date){
    var re = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{4}\b/;
    if(!re.test(date))
        return false;

    var separator = (date.indexOf("/") != -1) ? "/" : "-";
    var aux = date.split(separator);
    var day = parseInt(aux[0]);
    var month = parseInt(aux[1]);
    var year = parseInt(aux[2]);
    alert(aux[0]+" "+aux[1]+" "+aux[2]);
    var dateTest = new Date(year,month-1,day);
    alert(dateTest); //2nd alert
    if(dateTest.getDate() != day)
        return false;
    if(dateTest.getMonth()+1!= month)
        return false;
    if(dateTest.getFullYear() != year)
        return false;

    return true;    
}
Run Code Online (Sandbox Code Playgroud)

第一个警报始终显示正确的值.例如05/07/2011,如果传入日期,一切正常.第二个警报显示"Tue Jul 5 00:00:00 UTC+0200 2011"哪个是正确的.但现在,如果我将日期月更改为8月或9月,则创建日期是错误的.例如,对于日期05/08/2011,将显示第二个警报"Sun Dec 5 00:00:00 UTC+0100 2010".

谁都知道会发生什么?

Den*_*nis 5

确保你提供基数parseInt.如果不这样做,它将根据字符串"猜测".在这种情况下,08由于前缀为零,您将被解析为八进制值,然后您0返回.

var day = parseInt(aux[0], 10);
var month = parseInt(aux[1], 10);
var year = parseInt(aux[2], 10);
Run Code Online (Sandbox Code Playgroud)

提供十个基数将为您提供正确的结果.

//Parsing numbers:
parseInt("06");  // 6, valid octal
parseInt("07");  // 7, valid octal
parseInt("08");  // 0, invalid octal
parseInt("09");  // 0, invalid octal
parseInt("10");  // 10, parsed as decimal
parseInt("11");  // 11, parsed as decimal
parseInt("12");  // 12, parsed as decimal
Run Code Online (Sandbox Code Playgroud)