2012-06-05 7 views
0

나는 많은 jQuery UI 컨트롤, 특히 datepicker를 활용하는 asp.net 응용 프로그램에서 작업하고 있습니다. 내 웹 서비스에서객체의 배열을 반복

나는 다음과 같이 하나 이상의 개체를 포함하는 배열을 구문 분석 내 자바 스크립트로 다시 전달 다음 데이터베이스에 대한 호출을 만들고 개체의 목록을 검색하고 오전 :

javascript object http://s7.postimage.org/9nsq80rnv/JSON_object.png

는 내가 객체의 배열을 통해 루프가 나는를 적용 할 수 있도록 자바 스크립트 날짜 개체의 종료 날짜 및 STARTDATE 속성 사이에 떨어지는 경우를 확인할 수있는 논리의 어떤 종류를 포함해야 DatePicker의 CSS 스타일 첫 번째 질문은이 형식의 EndDate/StartDate 속성을 유효한 javascript Date로 변환하는 방법입니까? 그렇다면 배열을 반복하고 논리가 적용되어 날짜가 범위 내에 있는지 확인할 수 있습니까?

도움을 주시면 대단히 감사하겠습니다.

편집 :

function createDateRangesForCalendar() { 
    $.ajax({ 
     type: "POST", 
     url: "../Services/BookingService.asmx/GetCalendarDateRanges", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: false, 
     success: function (response) { 
      dateRanges = $.parseJSON(response.d); 
     }, 
     error: function (xhr, textStatus, thrownError) { 
      alert(textStatus); 
      alert(thrownError); 
     } 
    }); 
} 

function markInvalidDates(date) { 

    var isHoliday = false; 
    dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear(); 

    isHoliday = checkIsHoliday(date); 

    if ($.inArray(dmy, invalidDays) == -1) { 

     for (var i = 0; i < dateRanges.length; i++) { 
      // if date falls in between start and end date of object[i] return something like: return [true, "holiday", "Holiday Rates Apply - Minimum 14 days"]; 
      // else loop through to the next object and try there 
      } 

     if (isHoliday == true) { 
      return [true, "holiday", "Holiday Rates Apply - Minimum 14 days"]; 
     } else { 
      return [true, ""]; 
     } 
    } else { 
     return [false, "unavailable", "Unavailable"]; 
    } 
} 
+0

이미지를 약간 확대하면 더 좋을 것입니다. –

+0

코드가 있습니까? –

+0

시작일과 종료일이 있으므로 비교 대상은 무엇입니까? – Claude

답변

2

첫 번째 질문은이 형식의 EndDate/StartDate 속성을 유효한 javascript Date로 변환하는 방법이 있습니까?

형식은 /Date(MILLISECONDS)/ 인 것 같습니다. 올바른 JS 날짜 객체는 new Date(s.match(/Date\((\d+)/)[1])과 같이 얻을 수 있습니다.

그렇다면 어떻게 배열을 반복하고 논리를 적용하여 날짜가 범위 내에 있는지 확인하십시오.

var re = /Date\((\d+)/; 
for(var i in arr) { 
    var start = new Date(arr[i].startDate.match(re)[1]), 
     end = new Date(arr[i].endDate.match(re)[1]); 
    if(myDate < end && myDate > start) 
     // do something. 
} 

는 위의 질문, 내가 알고있는 방법을 답변을 보인다.

+0

이것은 정말로 유망 해 보입니다. 나는 지금 학교를 그만 두어야한다. 그러나 내가 집에 돌아 가자 마자 그것을 시험해보고, 그것이 효과가 있는지 알려줄 것이다. –

+0

헤이 방금 방금 당신의 방법을 시도하고 정규식이 모든 불필요한 문자를 제거하지 않기 때문에 시작과 끝 모두에 유효하지 않은 날짜가 나타납니다. 조사를 좀하고 알아낼 수 있는지 알아 보겠습니다. 죄송합니다. js가 약합니다. 정말 간단합니다. 그 외에는 모든 것이 순서대로 보입니다. –

+0

Hmmmm .... 나는 몇 가지 중단 점을 던져서 정규식이 확실히 밀리 초 값만 파싱하는 것이 확실하지만 새로운 Date()를 호출 할 때 여전히 유효하지 않은 날짜가 표시됩니다. –

2

:

여기 요청으로 image link

몇 가지 예제 코드입니다 : 여기 이미지가 좀 더 명확하게 여기 속성을 읽을 수 있습니다 볼 가지 어려운 발견 StartDate와 EndDate는 끝과 시작 부분의 슬래시를 제외하고 나에게 유효한 JSON처럼 보입니다. 그렇지 않으면 값의 간단한 평가는 사용자가 조작 할 수있는 JS Date Object를 생성해야합니다.

두 번째 요점은 배열에서 클래식 루핑을 방해하지 않을 수 있다는 것입니다. 어떤 코드는 더 많이 말할 때 훨씬 유용 할 것입니다.

+0

'eval()'은 악의적이다 – Claude

+0

그렇다. 자, 저는 이것이 통제 된 환경이 아니라는 것을 알고 있습니다. –

+2

@Claude : 실제로. JSON.parse()를 가정 해 봅시다. – RomainVALERI

2

\ Date() \ wrappers없이 숫자 만 시작일과 종료일을 반환하십시오.

루프에서 타겟 날짜 (예 : new Date(1334548800000))의 자바 스크립트 날짜를 만든 다음 대상 날짜와 시작일과 종료일 사이에 간단한 비교를 사용하십시오.

$.each(yourArray, function(id,item){ date comparison logic here });으로 반복 할 수 있지만 Underscore 라이브러리에서 JS 개체를 조작하기위한 적절한 유틸리티 세트를 살펴 보는 것이 좋습니다.

+0

+1은 밑줄로 표시됩니다. –

+0

피할 수 있다면 나는 단순히 C# 웹 메서드에서 개체 목록을 패키지화하기 위해 자바 스크립트 serializer를 사용하고 있으며 사용자가 말하는 내용을 처리하기 위해 새 클래스를 작성해야하므로이 작업을 수행하지 않는 것이 좋습니다. 나는 확실히 밑줄을 들여다 볼 것이다. –