2017-07-11 5 views
1

Ich erhalte Datum vom Server im folgenden Format.Das Datumsformat funktioniert nicht in angularjs

"2017-07-10T20: 51: 13.000Z".

Aber wenn ich das Datumsformat im Format "TT/MM/JJJJ" ändern werde, wird automatisch ein weiterer Tag hinzugefügt.

Bitte überprüfen Sie diese Plunkr.

Plunkr

var app = angular.module('plunker', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.date = '2017-07-10T20:51:13.000Z'; 
 
});
<!DOCTYPE html> 
 
<html ng-app="plunker"> 
 

 
    <head> 
 
    <meta charset="utf-8" /> 
 
    <title>AngularJS Plunker</title> 
 
    <script>document.write('<base href="' + document.location + '" />');</script> 
 
    <link rel="stylesheet" href="style.css" /> 
 
    <script data-require="[email protected]" src="http://code.angularjs.org/1.2.14/angular.js" data-semver="1.2.14"></script> 
 
    <script src="app.js"></script> 
 
    </head> 
 

 
    <body ng-controller="MainCtrl"> 
 
    <p ng-bind="date | date:'MM/dd/yyyy'"></p> 
 
    </body> 
 

 
</html>

Meine aktuelle Datum ist 10. Juli Aber mein Ergebnis ich erhalte 11. Juli Bitte helfen Sie mir, wie ich dieses Problem beheben können.

Antwort

2
//add custom filter 
.filter('datetime', function($filter){ 
    return function(input){ 
     if(input == null){ return ""; } 

     var _date = $filter('date')(new Date(input),'MM/dd/yyyy');   
     return _date.toUpperCase(); 
    }; 
}); 

//html 
{{ $scope.date | datetime }} 
1

Ich glaube, wir kämpfen mit dem gleichen Problem mit Ihnen sind bei meiner Arbeit. Das Problem sind Zeitzonen. Das von Ihnen angegebene Datum ist UTC (beachten Sie die Z).
Aber standardmäßig verwendet der Angular Filer die Zeitzone des Browsers. Sie haben ein paar Optionen. Das erste ist ein bisschen wie ein Hack, aber funktionieren könnte, und den Browser in UTC zu machen erzwingen:

{{ $scope.date | datetime | 'UTC'}} 

Dieses für funktionieren Rendering Datum (kein Zeitabschnitt), vorausgesetzt die Daten sind immer in UTC. Seien Sie vorsichtig, dass Sie immer UTC verwenden.

Die größere Lösung (die, an der wir gerade arbeiten) besteht darin, genauer zu spezifizieren, welches Datum-Zeit-Objekt benötigt wird. Wir verwenden jetzt nur bestimmte Datumswerte, die von der db bis zum Frontend beginnen. Dies eliminiert das Konzept der Zeitzonen. Das bedeutet, dass wir keine Standard-Datumsobjekte mehr im Backend oder im Frontend verwenden (zB AngularJS). Sie müssen also einen benutzerdefinierten Filter sowie eine benutzerdefinierte Eingabe erstellen, um dies korrekt auszuführen.