2012-03-29 3 views
3

나는 정말 바보 같은 것을 놓치고 있다고 생각하기에 너무 무감각 해 보이는 문제가 있습니다.자바 스크립트로 잘못된 날짜가 생성되었습니다.

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;  
} 

첫 번째 경고가 항상 정확한 값을 보여줍니다 나는 날짜의 유효성을 검사하는 다음과 같은 자바 스크립트 기능을 가지고있다. 수신 날짜가 예를 들어 05/07/2011 인 경우 모든 것이 정상적으로 작동합니다. 두 번째 경고는 "Tue Jul 5 00:00:00 UTC+0200 2011"이 옳다는 것을 보여줍니다. 하지만 지금은 8 월 또는 9 월 날짜 월을 변경하면 만든 날짜가 잘못되었습니다. 예를 들어, 날짜가 인 경우 두 번째 경고는 "Sun Dec 5 00:00:00 UTC+0100 2010"으로 표시됩니다.

누구나 무슨 일이 일어날 지 알고 있습니까 ??

+0

어디에서 날짜를 가져 왔습니까? 사용자 입력입니까? 그것 파일인가? 사용자 입력 인 경우 날짜 위젯을 사용하는 것이 더 좋지 않습니까? – T9b

답변

5

parseInt에 기수를 입력해야합니다. 그렇지 않으면 문자열을 기반으로 "추측"됩니다. 이 경우 접두사가 0이므로 사용자의 08이 8 진수 값으로 분석되며 다시 0이됩니다.

var day = parseInt(aux[0], 10); 
var month = parseInt(aux[1], 10); 
var year = parseInt(aux[2], 10); 

10 진수를 입력하면 정확한 결과를 얻을 수 있습니다.

//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 
관련 문제