2012-06-21 432 views
0

有沒有更好的方式來格式化用戶推測的日期。我有一個輸入欄,當點擊一個日曆時彈出,你可以選擇一個日期,但用戶也可以選擇輸入日期。我希望用戶能夠輸入1/12,並且我的JavaScript將其格式化爲01/12/2012。有沒有一種簡單的方法可以解決這個問題,而無需執行所有類型的檢查?如果不是什麼是最好的方式去做這件事?格式化用戶輸入日期。

+0

它的mm/dd/yyyy。 –

+0

我只是想出了一個很好的小修補程序,稍後我會在這裏發佈。 –

回答

3

我剛剛試了一下,但不知道它是否正確的方法,但我認爲它的工作(月/日/年)。

$('input[name="txt_date"]').on('blur', function(e){ 
    var dt=$(this).val(); 
    if(dt!='') 
    { 
     if(dt.indexOf('/')) 
     { 
      var da=dt.split('/'); 
      var l=da.length; 
      if(l <= 3) 
      { 
       var date=''; 
       for(i=0;i<l;i++) 
       { 
        if(i==0) 
        { 
         if(da[i].match(/^\d{1}|d{2}$/) && da[i]>0 && da[i]<=12) 
         { 
          var m=da[i].length==1 ? '0'+da[i] : da[i]; 
          date=m; 
         } 
        } 
        if(i==1) 
        { 
         if(da[i].match(/^\d{1}|d{2}$/) && da[i]>0 && da[i]<=31) 
         { 
          var d=da[i].length==1 ? '0'+da[i] : da[i]; 
          date+='/'+d; 
         } 
        } 
        if(i==2) 
        { 
         if(da[i].match(/^\d{4}$/)) 
         { 
          date+='/'+da[i]; 
         } 
         else date+='/'+new Date().getFullYear(); 
        } 
       } 
       if(l<3) 
       { 
        date+='/'+new Date().getFullYear(); 
       } 
       if(date.match(/^\d{2}\/\d{2}\/\d{4}$/)) 
       { 
        $(this).val(date); 
       } 
       else alert('invalid date!'); 
      } 
     } 
    } 
}); 

DEMO.

+0

'for'循環在開始的時候有點令人困惑 - 很好的技巧,但我更喜歡沒有'for'的代碼,'if(i == 0)'和'if(i == 1)'+ replace if (i == 2)'if'(l === 3)'+用'else'替換if(l <3)'' – Aprillion

+0

感謝您抽出時間寫出來。我喜歡這種方式,但覺得它與正則表達式有點難以理解。 –

+0

我結束了使用這一些。修改它有點但是是.. –

3

這個庫可以幫助你:http://www.datejs.com/

DD/MM/YYYY是例如有效的格式在西班牙,英國,...

+1

datejs多年未更新。我發現http://momentjs.com/是一個更清潔和更新的實現。 – mbarrows

1

這是我想出了。

var checkDate = function(dateVal, input){ 

      if(dateVal.length == 10){ 
       return; 
      } 
      var d = new Date(); 
      var currentMonth = d.getMonth(); 
      var year = d.getFullYear(); 
      var firstIndex = dateVal.indexOf('/'); 
      var month = parseInt(dateVal.substr(0, firstIndex)); 
      var day = parseInt(dateVal.substr(firstIndex + 1, 2)); 

      if(month < 10){ 
       month = '0' + month; 
      } 

      if(day < 10){ 
       day = '0' + day; 
      } 

      if(month > currentMonth){ 
       year = year - 1; 
      } 

      dateVal = month + '/' + day + '/' + year; 

      if(isNaN(month)){ 
       input.val(''); 
       return; 
      } 
      input.val(dateVal); 

     }; 
+0

我更喜歡Sheikh Heera的回答,但是如果這樣能夠捕捉到所有你想要的情況,那麼這是一種可行的方式 – Aprillion

+0

我向它添加了幾個小檢查來使它合法化,但它現在完成了我現在需要的一切。我也喜歡sheikh-heera的回答,但真的覺得這種方式是不可讀的。 –