2017-08-20 9 views
0

私のモデルは以下のコードで正常に動作しますが、入力タイプが間違っているため、 。警告を表示しないで、値のバインドが正しいことを確認する方法を教えてください。 モデルの値を日付として表示し、これをモデルのINTとして保持したいとします。 私のモデルは使用していますエラー:ngModel:datefmt、モデルは日付オブジェクトではありません。日付になると `yyyyMMdd`となるでしょう

$scope.start_date = "20170818"; 

HTML

<input type="date" Date-Converter ng-model="start_date" /> 

Error: ngModel:datefmt Model is not a date object Expected 20170818 to be a date

// Converts value parameter from yyyyMMdd into yyyy/MM/dd format and vice versa 
app.directive('dateConverter', function($filter) { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     link: function(scope, element, attr, ngModel) { 
      if (!ngModel) return; // do nothing if no ng-model 

      ngModel.$formatters.length=0; 
      ngModel.$parsers.length=0; 

      function fromUser(text) { 
       var value = $filter('date')(text, "yyyyMMdd");     
       return value; 
      } 

      function toUser(text) {    
       var value = new Date(); 
       if(text != undefined && text!='' && text.length==8){ 
        var year  = text.substring(0,4); 
        var month  = text.substring(4,6); 
        var day   = text.substring(6,8);    
        var value  = new Date(year, month-1, day); 
       } 
       return value;    
      } 

      ngModel.$parsers.push(fromUser); 
      ngModel.$formatters.push(toUser); 
     } 
    }; 
}); 

答えて

0

あなたの問題は、このコード行に関連する必要があります。

var value = $filter('date')(text, "yyyyMMdd"); 

あなたはAngularJS日付フィルタを使用していますしかし、あなたがオフィを見ればCIALページ、メソッドの最初のパラメータは以下の通りです:

Date to format either as Date object, milliseconds (string or number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is specified in the string input, the time is considered to be in the local timezone.

https://docs.angularjs.org/api/ng/filter/date

ですから、彼らは文字列またはint型であっても、ミリ秒を提供する必要がありますが、彼らは、ミリ秒を表す必要はなく、日付形式は20170818です。

だから、私の提案は、それがあるとして、あなたの構造を維持することですが、このコード行を呼び出すために前に:

var value = $filter('date')(text, "yyyyMMdd"); 

あなたは、有効な日付フォーマットにあなたのタイプを変換する必要があります。ですから、例えば、何かのように:

var d = new Date(text.substring(0,4), text.substring(4,6), text.substring(6)); 

そして:

var value = $filter('date')(d, "yyyyMMdd"); 
関連する問題