Erreur: Prévu `2015-05-29T19: 06: 16.693209Z` pour être une date – Angulaire

Je travaille sur angular application angular avec Django avec rest-framework

L'application reçoit ses informations avec json du serveur .. Une des clés est created_time … La valeur de ce champ est format selon iso-8601 , par exemple 2015-05-29T19:06:16.693209Z .

Dans le client, j'ai un champ:

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

Mais lorsque les données arrivent, j'obtiens cette erreur:

 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) 

J'ai déjà tout essayé: (le format est exactement comme les instructions dans les documents …

Cela doit se produire avec un angle de 1.3+. 1.3+ sur wards ng-model pour la date / heure, l'entrée doit être un objet de date valide, la représentation de la chaîne n'est plus autorisée. Vous devez convertir l'objet string en date ( $scope.created_time = new Date(dateString) ) et liez-le au modèle ng. Si vous suivez le lien d'erreur, vous avez une description claire de l'erreur et comment la résoudre.

Toutes les entrées liées à la date requièrent que le modèle soit un objet Date. Si le modèle est autre chose, cette erreur sera lancée. Angular ne définit pas les erreurs de validation sur ce cas car ces erreurs sont affichées à l'utilisateur, mais l'état erroné a été causé par une logique d'application incorrecte et non par l'utilisateur.

Si vous obtenez vos données d'un service REST, vous pouvez simplement convertir vos champs en 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 }); 

Créez une directive simple qui convertit la valeur du modèle:

HTML:

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

Directif:

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

En plus de la réponse de PSL. Voici comment annuler les exigences angulaires 1.3+ pour être un objet 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; } }; }); 

Il peut être utilisé avec AngularFire $ firebaseObject et fonctionne bien avec $ bindTo 3-way binding. Pas besoin d'étendre le service $ firebaseObject. Il fonctionne dans les applications ioniques / cordova.

Exemple de travail sur jsfiddle

Sur la base de cette réponse

Problème C'est le problème du format de date, j'ai résolu ce problème en utilisant ce code. Solution: un morceau de code résoudra ce problème:

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

Où en-us format = "Friday, Feb 1, 2013 06: 00 AM", espérons que cela aidera les autres à résoudre le problème, j'ai été confronté à une telle erreur et résolu avec cela.

J'ai eu cette erreur et j'ai utilisé directement l'objet: je publie la solution que j'ai effectuée:
1: $ userData.dob = nouvelle Date (userData.dob); 2: $ scope.edit.userdob = userData.dob; Avant 1, j'ai fait face à une erreur ci-dessus alors j'ai créé directement l'objet et l'ai affecté à la portée d'édition et le problème a été résolu.

Si la date est réduite de 1 jour, utilisez ce code,

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

Si vous devez mettre à jour toutes les dates dans Array with Objects

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