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
Post a Comment