2011-09-12 4 views
0

날짜를 확인하면서 캘린더 위젯과 입력 필드를 업데이트하는 코드가 있습니다. 우리는 사용자가 모든 유형의 m-d-y 형식 (m.d.y, m-d-y 등)을 입력 할 수있게하려고합니다. 문제는 YUI 달력 위젯은 m/d/y 형식 만 허용한다는 것입니다. 다른 모든 것은 NaN으로 반환됩니다. 날짜를 형식화하는 데 몇 가지 방법을 시도했지만 작동하는 것으로 보이는 것은 얻을 수 없습니다. 나는 많은 과장된 코드로 이것을 할 수 있기를 바란다. 누구든지 여기에 최선의 접근 방법에 대한 제안이 있습니까? 여기 내 코드 :자바를 사용하는 날짜 형식 지정 옵션

//CALENDAR --------------------------------------------------------------------------------  
var initCal = function(calendarContainer){  
    if(YAHOO.env.getVersion("calendar")){ 
     var txtDate = Dom.get("dateOfLoss"); 
     var myDate = new Date(); 
     var day = myDate.getDate(); 
     var month = myDate.getMonth() +1; 
     var year = myDate.getFullYear() -1; 
     var newDate = month + "/" + day + "/" + year; 

     function handleSelect(type, args, obj){ 
      var dates = args[0]; 
      var date = dates[0]; 
      var year = date[0], month = date[1], day = date[2]; 

      txtDate.value = month + "/" + day + "/" + year; 
      aCal.hide(); 
     } 

     function updateCal(){ 
      if (!(txtDate.value.match(/((\d{2})|(\d))\/|\-((\d{2})|(\d))\/|\-((\d{4})|(\d{2}))/))) {     
       alert("Enter date in mm/dd/yy or mm/dd/yyyy format."); 
      } 
      else { 
       if (txtDate.value != "") { 
        aCal.select(txtDate.value); 
        var selectedDates = aCal.getSelectedDates(); 
        if (selectedDates.length > 0) { 
         var firstDate = selectedDates[0]; 
         aCal.cfg.setProperty("pagedate", (firstDate.getMonth() + 1) + "/" + firstDate.getFullYear()); 
         aCal.render(); 
        } 
        else { 
         alert("Date of Loss must be within the past year."); 
        } 

       } 
       } 






     } 

     var aCal = new YAHOO.widget.Calendar(null, calendarContainer, { 
      mindate: newDate, 
      maxdate: new Date(), 
      title: "Select Date", 
      close: true 
     }); 

     aCal.selectEvent.subscribe(handleSelect, aCal, true); 
     aCal.render(); 

     Event.addListener("update", "click", updateCal); 
     Event.addListener(txtDate, "change", function(e){ 
      updateCal(); 

     }); 

     // Listener to show the 1-up Calendar when the button is clicked 
     // Hide Calendar if we click anywhere in the document other than the calendar 
     Event.on(document, "click", function(e){ 
      var el = Event.getTarget(e); 
      if(Dom.hasClass(el, "calendarButton")) 
       aCal.show(); 
      else if (Dom.hasClass(el, "link-close") || !Dom.isAncestor(calendarContainer, el)) 
       aCal.hide();     
     }); 
    } 
    else { 
     var successHandler = function() {  
      initCal(calendarContainer);  
     }; 

     OURPLACE.loadComponent("calendar", successHandler); 
    }    
};  
+0

답변이 하나도 없으면 어떻게됩니까? 나는 여전히 그들을 받아 들여야합니까? 내가 알아 낸 바로는 이제 내 자신의 질문에 대답하고있다. – mbastian05

답변

0
var updateCal = function(){   
      if (!(txtDate.value.match(/^(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.]\d\d+$/))) { 

       return; 
      } 
      //else if ((txtDate.value.match(/^(0?[1-9]|1[012])[- .](0?[1-9]|[12][0-9]|3[01])[- .]\d\d+$/))) {            

      //} 
      else {     
       var changedDate = txtDate.value; 
       changedDate = changedDate.replace(/[. -]/g, "/");  
       txtDate.value = changedDate; 
       badClaimDate = claimDateWithinPastYear(); 
       aCal.select(changedDate);     

내가있는 경우, 필요한 구분 기호를 교체해야하는 결정하기 위해 정규식을 사용하고 단순히 .replace을 사용했다.