错误:ngModel:datefmt,模型不是日期对象,预期"yyyyMMdd"为日期



我的模型在下面的代码下工作正常,但它在控制台中抛出一个错误,关于模型中错误的数据类型绑定,因为输入类型是日期。如何指示确保不应出现警告并且绑定的值正确。 我想将我的模型值显示为日期,并将其保留为模型中的 INT。 我的模型使用

$scope.start_date = "20170818";

.HTML

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

错误: ngModel:datefmt 模型不是日期对象 预期20170818成为日期

// 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);
}
};
});

您的问题应该与以下代码行有关:

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

您使用的是 AngularJS 日期过滤器,但如果您查看官方页面,该方法的第一个参数如下:

要格式化为 Date 对象的日期,毫秒(字符串或数字( 或各种 ISO 8601 日期时间字符串格式(例如 yyyy-MM-ddTHH:mm:ss.sssZ 及其较短的版本,如 yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ(.如果没有时区 在字符串输入中指定,时间被视为在 本地时区。

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"); 

最新更新