错误:预计`2015-05-29T19:06:16.693209Z`为date – Angular

我正在与Djangorest-framework angular应用程序..

该应用程序从服务器接收它的信息与JSON。其中一个键是created_time …该created_time的值是格式根据iso-8601 ,例如2015-05-29T19:06:16.693209Z

在客户端我有一个字段:

 <input type="time" ng-model="created_time"> 

但是当数据到达时,我得到这个错误:

 Error: [ngModel:datefmt] Expected `2015-05-29T19:06:16.693209Z` to be a date http://errors.angularjs.org/1.3.13/ngModel/datefmt?p0=2015-05-29T19%3A06%3A16.693209Z at REGEX_STRING_REGEXP (angular.js:63) at Array.<anonymous> (angular.js:19807) at Object.ngModelWatch (angular.js:23289) at Scope.$get.Scope.$digest (angular.js:14235) at Scope.$get.Scope.$apply (angular.js:14506) at done (angular.js:9659) at completeRequest (angular.js:9849) at XMLHttpRequest.requestLoaded (angular.js:9790) 

我已经尝试了一切:(格式是完全一样的angular度文档中的说明…

这必须以angular度1.3+发生。 对于date/时间input的1.3+以上ng-model需要是有效的date对象,不再允许使用date的string表示。 您需要将string转换为date对象( $scope.created_time = new Date(dateString) )并将其绑定到ng模型。 如果您按照错误链接进行操作,则会明确说明错误以及如何解决错误。

所有与date相关的input都要求模型是Date对象。 如果模型是别的,这个错误将被抛出。 在这种情况下,Angular没有设置validation错误,因为这些错误是向用户显示的,但是错误的状态是由不正确的应用程序逻辑引起的,而不是由用户引起的。

如果您从REST服务获取数据,则可以简单地将字段转换为date。

 $http.get(url).success(function(data){ $scope.data = data; // get row data $scope.data.mydatefield = new Date($scope.data.mydatefield); // convert filed to date }); 

创build一个转换模型值的简单指令:

HTML:

 <input date-input type="time" ng-model="created_time"> 

指示:

 app.directive('dateInput', function(){ return { restrict : 'A', scope : { ngModel : '=' }, link: function (scope) { if (scope.ngModel) scope.ngModel = new Date(scope.ngModel); } } }); 

除了PSL的回答。 这是如何覆盖angular1.3+要求是一个date对象。

<input type="date" ng-model="book.date" date-format/>

 app.directive('dateFormat', function() { return { require: 'ngModel', link: function(scope, element, attr, ngModelCtrl) { //Angular 1.3 insert a formater that force to set model to date object, otherwise throw exception. //Reset default angular formatters/parsers ngModelCtrl.$formatters.length = 0; ngModelCtrl.$parsers.length = 0; } }; }); 

它可以与AngularFire $ firebaseObject一起使用,并且可以正常使用$ bindTo 3-way绑定。 不需要扩展$ firebaseObject服务。 它适用于离子/cordova应用。

在jsfiddle上工作的例子

根据这个答案

问题其实这是date格式问题,我已经通过使用这段代码解决了这个问题。 解决scheme:下面的一段代码将解决这个问题:

  var options = { weekday: "long", year: "numeric", month: "short", day: "numeric", hour: "2-digit", minute: "2-digit" }; $scope.created_time = $scope.created_time.toLocaleTimeString("en-us", options); 

en-us格式=“星期五,2013年2月1日上午06:00”,希望这会帮助别人解决问题,我正面临着这样的错误,并与此解决。

我有这个错误,我直接使用的对象:我张贴解决scheme女巫我进行了:
1:$ userData.dob = new Date(userData.dob); 2:$ scope.edit.userdob = userData.dob; 之前1我面临上述错误,然后我直接创build该对象,并将其分配到编辑范围,问题得到解决。

如果date减less1天,则使用此代码,

 new Date(moment.utc(value).format('l LT')) 

如果您需要更新Array with Objects中的所有date

 var data = [ { id: "1" , birthday: "2016-01-20T11:24:20.882Z"}, { id: "2" , birthday: "2016-01-20T11:24:20.882Z"}, { id: "3" , birthday: "2016-01-20T11:24:20.882Z"}, ]; function convertDataStingToObject (data) { for(var i=0; i < data.length; i++ ){ console.log('string: ' + data[i].birthday); data[i].birthday = new Date(data[i].birthday); console.log('updated: ' + data[i].birthday); console.log(typeof(data[i].birthday)); } return data; } convertDataStingToObject(data);