angularjs - Error: ngModel:datefmt, Model is not a date object, Expected `yyyyMMdd` to be a date -


my model works fine below code throws error in console wrong data type binding in model input type date. how can instruct ensure warning should not appear , value being bound correct. want show model value date , keep int in model. model uses

$scope.start_date = "20170818"; 

html

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

error: ngmodel:datefmt model not date object expected 20170818 date

// converts value parameter yyyymmdd yyyy/mm/dd format , vice versa app.directive('dateconverter', function($filter) {     return {         restrict: 'a',         require: 'ngmodel',         link: function(scope, element, attr, ngmodel) {             if (!ngmodel) return; // 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);         }     }; }); 

your issue should related line of code:

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

you using angularjs date filter, if in official page, first parameter of method following:

date format either date object, milliseconds (string or number) or various iso 8601 datetime string formats (e.g. yyyy-mm-ddthh:mm:ss.sssz , shorter versions yyyy-mm-ddthh:mmz, yyyy-mm-dd or yyyymmddthhmmssz). if no timezone specified in string input, time considered in local timezone.

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

so should provide milliseconds, if string or int, should represent millisecond, , not date format 20170818.

so suggestion keep structure is, before call line of code:

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

you should convert type valid date format. example like:

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

and then:

var value = $filter('date')(d, "yyyymmdd");  

Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -