2011-09-12 16 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を使用するために必要な区切り文字を決定するために正規表現を使用。

関連する問題