2013-10-22 37 views
0

我覺得來形容這個問題的最好辦法是你引導到普拉克:角UI日期選擇器時,輸入到輸入字段不允許格式DD.MM.YYYY

http://plnkr.co/edit/cRO5UgAyZx5SHJSKrzg7?p=preview

角-ui datepicker不喜歡我們歐洲人! 首先在日期選擇器中選擇一個日期。假設它是10月25日(至少一天應該大於12)。您會發現datepick格式已被設置爲dd.MM.yyyy,並且在輸入字段中設置的日期中被重新設置。 現在改變一年。這不會在日期選擇器中顯示。 但是,如果以MM.dd.yyyy的格式輸入日期,一切都很好。

我已經添加了angular-locale_de-de.js,這似乎是可以在Oktober的拼寫中看到的。 那麼,爲什麼我不能在歐洲[正確和合乎邏輯的日前]格式中輸入日期?

+1

這似乎是在角UI日期選擇器中的錯誤,而不是你的誤用。 – lort

回答

4

您可以使用角指示。

var app = angular.module('plunker', ['ui.bootstrap']); 
app.directive('formatteddate', function ($filter) { 
    return { 
     link: function (scope, element, attrs, ctrl) { 
      ctrl.$parsers.unshift(function (viewValue) { 
       return $filter('date')(viewValue,'dd.MM.yyyy'); 
      });    
     }, 
     restrict: 'A', 
     require: 'ngModel' 
    }; 
}); 

,比HTML使用它

<input type="text" formatteddate="dt.date" .../> 
+0

這裏是工作示例來解決這個問題。 http://jsfiddle.net/maxmalik/FUtyt/ – Max

+0

不錯的想法,但不幸的是它似乎並沒有工作。如果您使用日期選擇器選擇2013年10月25日,然後手動更改2013年至2014年,日期選擇器中的日期不會更改。 –

+1

你說得對。 修復它http://jsfiddle.net/maxmalik/FUtyt/2/ :) – Max

0

好的我已經想通了。問題在於新的Date([dateString])方法,該方法只取某些值。我已經編輯UI的自舉TPLS-0.6.0.js開始行1148正如你所看到的,存在有一個TODO由角UI團隊;-)

// TODO: reverse from dateFilter string to Date object 
    function parseDate(viewValue) { 
    if (!viewValue) { 
     ngModel.$setValidity('date', true); 
     return null; 
    } else if (angular.isDate(viewValue)) { 
     ngModel.$setValidity('date', true); 
     return viewValue; 
    } else if (angular.isString(viewValue)) { 
     var date = new Date(viewValue); 
     if (isNaN(date)) { 
// If the date is inputted in the European dd.mm.yyyy format, it will be invalid 
// This flips the month and the day around 
      var dLastPos = dateFormat.lastIndexOf('d'); 
      var mPos = dateFormat.indexOf('M'); 
      var dSep, newViewValue; 
      if(mPos>dLastPos){ 
       dSep = dateFormat.substr(mPos-dLastPos,1); 
       newViewValue = viewValue.split(dSep); 
       if(typeof newViewValue=='object'){ 
        newViewValue=newViewValue[1]+dSep+newViewValue[0]+dSep+newViewValue[2]; 
       } 
      } 
      date = new Date(newViewValue); 
      if (isNaN(date)) { 
       ngModel.$setValidity('date', false); 
       return undefined; 
      } else { 
       ngModel.$setValidity('date', true); 
       return date; 
      } 
     } else { 
     ngModel.$setValidity('date', true); 
     return date; 
     } 
    } else { 
     ngModel.$setValidity('date', false); 
     return undefined; 
    } 
    } 
+0

Max的解決方案非常適合格式化日期。但是,由於JavaScript無法以dd.mm.yyyy格式創建新日期(2013年12月31日),所以仍然需要翻轉月份和日期才能使其生效。一旦格式化日期以允許創建Date對象,日期選擇器將繼續正常工作。 –

相關問題