2011-09-12 57 views
0

我有這個代碼來更新日曆小部件和輸入字段,同時驗證日期。我們希望用戶能夠輸入任何類型的m-d-y格式(m.d.y,m-d-y等)。問題是YUI日曆小部件只接受m/d/y格式。所有其他人以NaN形式返回。我嘗試了一些方法來格式化日期,但無法得到任何似乎可行的方法。我希望能夠用很多誇大代碼來做到這一點。有沒有人對這裏的最佳方法有任何建議?這裏是我的代碼:使用Javascript日期格式化選項

//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。