2013-03-25 3 views
0
<script> 
    dfrom = datefrom.split("/"); 
    dto = dateto.split("/"); 

    //Checking Year Part; 
    if(parseInt(dfrom[2]) > parseInt(dto[2])){ 
     alert("DateFrom Cannot greater than DateTo"); 
     return false; 
    } 
    if((parseInt(dfrom[1]) > parseInt(dto[1])) && parseInt(dfrom[2]) == parseInt(dto[2])){ 
     alert("DateFrom Cannot greater than DateTo"); 
     return false; 
    } 
    if(parseInt(dfrom[0]) > parseInt(dto[0]) && (parseInt(dfrom[1]) == parseInt(dto[1])) && parseInt(dfrom[2]) == parseInt(dto[2])){ 
     alert("DateFrom Cannot greater than DateTo"); 
     return false; 
    } 
</script> 

날짜와 잘 작동하지만 2013년 7월 4일 및 2013년 8월 4일을 확인할 때, 그것은이다 "DateFrom DateTo보다 큰 수"와 이 날짜 만 잘못된 결과를 표시합니다. 스크립트에 오류가 있습니까?자바 스크립트 :이 날짜를 비교하는 내 스크립트 코드 비교

도움이 매우 도움이 될 것입니다.

+2

자바 스크립트 날짜 라이브러리를 사용하십시오. 훨씬 쉽습니다. – ahren

+0

parseInt (something, 10) 또는 '08'과 '09'문자열을 8 진수로 사용하십시오. – kennebec

+0

작성된 코드는 (세미) 난센스입니다. return 문은 있지만 포함 함수는 없습니다. 오른쪽 배관을 추가하더라도 (그리고 기수를 사용하지 않고 parseInt를 사용하지 않아도 됨), 코드는 언급 된 날짜와 함께 작동하는 것처럼 보입니다. 그러나 다시는 내가 가지고 있지 않은 방식으로 코드를 변경하는지 알고 있습니다. – jmbucknall

답변

1

(이

dfrom = datefrom.split("/"); 
dto = dateto.split("/"); 


var x=new Date(); 
x.setFullYear(dfrom [2],dfrom [1]-1,dfrom [0]); 

var y=new Date(); 
y.setFullYear(dto [2],dto [1]-1,dto [0]); 


if (x>y) 
    { 
    alert("X is big "); 
    } 
else 
    { 
    alert("Y is big"); 
    } 

see here

+0

+1을 사용하여 Date 개체를 사용할 수 있지만 날짜 개체를 만든 다음 값을 수정할 필요가 없습니다. 생성자를 호출하고 단계 및 함수 호출을 저장합니다. – RobG

1

에서는 parseInt 함수의 인수를 해석, 문자열로 시작 때 기본적으로 8 진수 기수 (기본-8 번호 체계)를 사용하는 이전 버전의 브라우저 "0"시도 예 : '07', '08'). ECMAScript 5 현재 기본값은 10 진수 기수 (10)입니다 (까다 롭지 만 적어도 지금은 감가 상각됩니다).

즉, 두 번째 매개 변수 (기수, 어떤 번호 매기기 시스템을 의미하는지)를 지정하지 않고 parseInt에 0으로 시작하는 문자열 (01) 또는 숫자 (01)를 전달하면 기수 8을 가진 것으로 해석되어야합니다. 이것은 07 === 7과 08이 정의되지 않은 동작 (0, "", 정의되지 않음, 누가 알겠습니까?)을 가졌음을 의미합니다. 그런데 일반베이스 (10)

에 대한 예에서는 parseInt (X, 10)에 대해, (나는 내가 알고있는) 날짜를 처리 할 때

항상에서는 parseInt에 두 번째 매개 변수에 기수를 설정, 안전하려면 선행 숫자가 0이면 8 진수를 다른 언어로 나타 내기 때문에 문자열을 숫자로 변환 할 때이를 제거하는 것이 좋습니다.

행운을 빈다.

+0

맨 앞의 0을 처리하는 방법을 변경하는 ES5에 대해서는 정확하지만 모든 브라우저가 아직 그것을 구현하지는 않습니다 (있는 경우). 8 진수 처리법은 * 사용되지 * 않습니다. 제거됩니다. – RobG

0

날짜 문자열을 비교하는 가장 쉬운 방법은 날짜 개체를 날짜 개체로 바꾸고 비교하여 날짜 문자열이 d/m/y 형식 인 경우에 비교하는 것입니다. 당신은 할 수 있습니다 :

비교 또는 산술 연산에 사용
// s in format d/m/y 
// e.g. 15/3/2013 or 15/03/2013 
function toDate(s) { 
    var s = s.split('/'); 
    return new Date(s[2], --s[1], s[0]); 
} 

var d0 = '3/3/2013'; 
var d1 = '15/3/2013'; 

// Compare dates 
alert(toDate(d0) < toDate(d1)); // true 

alert(toDate(d1) < toDate(d0)); // false 

는 Date 객체는 자신의 time value있는 번호로 강제된다.