我的模型可以正常使用下面的代码但是它在控制台中输出错误,因为输入类型是日期,模型中的数据类型绑定错误。如何指示确保不应出现警告并且绑定值是正确的。 我想将我的模型值显示为日期,并将其保留为模型中的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);
}
};
});
答案 0 :(得分:0)
您的问题应与此行代码相关:
var value = $filter('date')(text, "yyyyMMdd");
您正在使用AngularJS日期过滤器,但如果查看官方页面,该方法的第一个参数如下:
格式化日期对象,毫秒(字符串或数字)的日期 或各种ISO 8601日期时间字符串格式(例如 yyyy-MM-ddTHH:mm:ss.sssZ及其较短的版本 yyyy-MM-ddTHH:mmZ,yyyy-MM-dd或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");