2012-11-26 4 views
0

내 배열의 항목이 오늘 만들어 졌는지 확인하고 싶습니다. 배열에있는 각 요소를 필터링하기 위해 arrayFilter를 사용하고 있습니다. 문제는, 필자의 필터가 작동하지 않습니다. 제대로 :이 오늘 생성되지 않았습니다 그래서 분명히자바 스크립트의 날짜 문자열 비교

formatted: 26/11/2012 
enquiry.EnquiryDate: 08/11/2012 08:46:46 

enquiry 필터링해야합니다

여기
return ko.utils.arrayFilter(self.enquiries(), function (enquiry) { 
    var include = true; 

    if (self.onlyToday()) { 
     var formatted = $.datepicker.formatDate("dd/mm/yy", new Date()); 

     include = include && +enquiry.EnquiryDate.indexOf(+formatted > -1); 
    } 

    return include; 
}); 

내 데이터가 모습입니다.

답변

2

여기에 몇 가지 문제가 있습니다.

  1. 당신은 나중에 +formatted > -1를 사용하여, formatted에 문자열을두고 있습니다. +formatted은 항상 NaN이며, 결코 > -1이 아닙니다 (이는 -1과 결코 같지 않으며 결코 < -1이 아닙니다).

  2. includetrue으로 설정하고 include = include && ...을 설정하고 있습니다. && 다음 부분은 &&의 왼쪽 부분이 true이고 JavaScript (대부분의 현대 언어와 같은)가 단락 회로이기 때문에 절대로 평가되지 않습니다. enquiry는 객체를 참조하는 경우는 valueOf를 오버라이드 (override)하지 않는 한

  3. , +enquiry 아마 NaN 될 것입니다.

  4. 당신은 비교의 가장 중요한 부분이 가장 중요한 값은 바로에있는 형식에 왼쪽   —하지만 날짜 문자열에있을 것입니다 의미 문자열을 비교하고 있습니다. 그래서 예를 들어, 문자열"01/01/2013"은 심지어 그들이 대표하는 날짜의 사실이 아니에요 물론이지만,문자열"02/02/2012"보다 적습니다. 의미가있는 경우 문자열을과 비교하려면 왼쪽에 연도가 있고 그 다음에 달이오고 그 다음에 날짜가 있어야합니다. 당신의 인용 enquiry.EnquiryDate 문자열을 기반으로

, 당신은이 작업을 수행 할 수 있습니다

var today = $.datepicker.formatDate("yy/mm/dd", new Date()); 
return ko.utils.arrayFilter(self.enquiries(), function (enquiry) { 
    var parts, enqDate; 

    parts = enquiry.EnquiryDate.split(' ')[0].split('/'); 
    enqDate = parts[2] + '/' + parts[1] + '/' + parts[0]; 
    return enqDate === today; 
}); 

노트 위에 : 나는 올해에 오늘의 날짜를 얻고있다

  • 주 왼쪽.

  • self.onlyToday()이 거짓 인 경우 필터가 아무 것도하지 않았기 때문에 self.onlyToday() 비트를 제거했습니다. 내 생각 엔이 필터 함수 밖에서 검사를하고 싶다면이 필터를 호출 할 것인가 말 것인가.enquiry.EnquiryDate 이후

  • 는 우리 (일) 제 참여하고 / 그것을 분할 시간 문자열이 스페이스로 구분 먼저 우리는 공간을 분할 날짜이다. 그런 다음 yy/mm/dd 순서로 재결합합니다.

  • 이제 문자열에 ===을 입력하여 조회 날짜가 오늘과 같은지 확인할 수 있습니다.

사용하여, 당신은 물론, Date 객체를 사용하여이 비교를 할 수 있지만, 그냥 어쨌든 Date 객체에 enquiry.EnquiryDate 문자열을 구문 분석해야 할 것 같은, 당신은 하루 해상도 (밀리 초되지 해상도를) 원하는 문자열 비교는 합리적으로 보인다.