Errore: Previsto `2015-05-29T19: 06: 16.693209Z` per essere una data – Angolare

Sto lavorando su un’applicazione angular con Django con il rest-framework ..

L’app riceve le informazioni con json dal server .. Una delle chiavi è created_time … Il valore di questo campo è formato in base a iso-8601 , ad esempio 2015-05-29T19:06:16.693209Z .

Nel client ho un campo:

  

Ma quando i dati arrivano ottengo questo errore:

 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. (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) 

Ho già provato tutto 🙁 il formato è esattamente come le istruzioni nei documenti di angular …

Questo deve accadere con l’angular 1.3+. 1.3+ sui reparti ng-model per l’input di data / ora deve essere un object data valido, la rappresentazione di stringa della data non è più consentita. È necessario convertire la stringa in object data ( $scope.created_time = new Date(dateString) ) e collegarlo al modello ng. Se segui il link di errore , ha una descrizione chiara dell’errore e su come risolverlo.

Tutti gli input relativi alla data come richiedono che il modello sia un object Date. Se il modello è qualcos’altro, verrà generato questo errore. Angular non imposta errori di convalida in questo caso, poiché tali errori vengono mostrati all’utente, ma lo stato errato è stato causato da una logica di applicazione errata e non da parte dell’utente.

Se ottieni i tuoi dati da un servizio REST, puoi semplicemente convertire i tuoi campi in Data.

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

Creare una direttiva semplice che converta il valore del modello:

HTML:

  

Direttiva:

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

Oltre alla risposta di PSL. Ecco come sovrascrivere i requisiti angolari 1.3+ come object Date.

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

Può essere utilizzato con AngularFire $ firebaseObject e funziona bene con bind $ binding a 3 vie. Non è necessario estendere il servizio $ firebaseObject. Funziona in applicazioni ioniche / cordova.

Esempio di lavoro su jsfiddle

Basato su questa risposta

Problema In realtà questo è il problema del formato della data, ho risolto questo problema utilizzando questa parte di codice. Soluzione: qui sotto il codice risolverà questo problema:

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

dove en-us format = “Venerdì 1 febbraio 2013 06: 00 AM”, spero che questo possa aiutare gli altri a risolvere il problema, mi trovavo di fronte a un tale errore e mi sono risolto con questo.

Ho avuto questo errore e ho usato direttamente l’object: sto postando la soluzione che ho realizzato:
1: $ userData.dob = new Date (userData.dob); 2: $ scope.edit.userdob = userData.dob; prima di 1 ho affrontato l’errore precedente, ho creato direttamente l’object e l’ho assegnato all’ambito di modifica e il problema è stato risolto.

se la data viene ridotta di 1 giorno, usa questo codice,

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

Se è necessario aggiornare tutte le date in Array con oggetti

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