Ich habe ein UTC-Datum in Millisekunden, das ich zur menschlichen Formatierung an Angulars Datumsfilter übergebe.
{{someDate | date:'d MMMM yyyy'}}
Genial, außer someDate
in UTC und der Datumsfilter betrachtet es als Ortszeit.
Wie kann ich Angular sagen, dass someDate
es sich um UTC handelt?
Vielen Dank.
angularjs
datetime
angularjs-filter
Francisc
quelle
quelle
Antworten:
Ähnliche Frage hier
Ich werde meine Antwort erneut veröffentlichen und eine Zusammenführung vorschlagen:
Die Ausgabe von UTC scheint Gegenstand einiger Verwirrung zu sein - die Leute scheinen sich für moment.js zu interessieren .
Aus dieser Antwort entlehnt, könnten Sie so etwas tun (dh eine Konvertierungsfunktion verwenden, die das Datum mit dem UTC-Konstruktor erstellt), ohne moment.js:
Regler
var app1 = angular.module('app1',[]); app1.controller('ctrl',['$scope',function($scope){ var toUTCDate = function(date){ var _utc = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()); return _utc; }; var millisToUTCDate = function(millis){ return toUTCDate(new Date(millis)); }; $scope.toUTCDate = toUTCDate; $scope.millisToUTCDate = millisToUTCDate; }]);
Vorlage
<html ng-app="app1"> <head> <script data-require="angular.js@*" data-semver="1.2.12" src="http://code.angularjs.org/1.2.12/angular.js"></script> <link rel="stylesheet" href="style.css" /> <script src="script.js"></script> </head> <body> <div ng-controller="ctrl"> <div> utc {{millisToUTCDate(1400167800) | date:'dd-M-yyyy H:mm'}} </div> <div> local {{1400167800 | date:'dd-M-yyyy H:mm'}} </div> </div> </body> </html>
Hier ist Plunker , um damit zu spielen
Siehe auch dies und das .
Beachten Sie auch, dass bei dieser Methode, wenn Sie das 'Z' aus dem Datumsfilter von Angular verwenden, Ihr lokaler Zeitzonenversatz anscheinend immer noch gedruckt wird.
quelle
Scheint, als würden AngularJS-Leute in Version 1.3.0 daran arbeiten. Sie müssen lediglich
: 'UTC'
nach der Formatzeichenfolge hinzufügen . Etwas wie:{{someDate | date:'d MMMM yyyy' : 'UTC'}}
Wie Sie in den Dokumenten sehen können , können Sie auch hier damit spielen: Plunker-Beispiel
Übrigens, ich denke, es gibt einen Fehler mit dem Z-Parameter, da er auch mit 'UTC' immer noch die lokale Zeitzone anzeigt.
quelle
Hier ist ein Filter , der eine Datumszeichenfolge ODER ein Javascript-Date () -Objekt verwendet. Es verwendet Moment.js und kann jede Moment.js- Transformationsfunktion anwenden , z. B. die beliebte Funktion 'fromNow'.
angular.module('myModule').filter('moment', function () { return function (input, momentFn /*, param1, param2, ...param n */) { var args = Array.prototype.slice.call(arguments, 2), momentObj = moment(input); return momentObj[momentFn].apply(momentObj, args); }; });
Damit...
{{ anyDateObjectOrString | moment: 'format': 'MMM DD, YYYY' }}
würde den 11. November 2014 anzeigen
würde vor 10 Minuten anzeigen
Wenn Sie mehrere Momentfunktionen aufrufen müssen, können Sie diese verketten. Dies konvertiert in UTC und formatiert dann ...
{{ someDate | moment: 'utc' | moment: 'format': 'MMM DD, YYYY' }}
quelle
In angular.js repo https://github.com/angular/angular.js/issues/6546#issuecomment-36721868 wurde ein Fehler dagegen gemeldet
quelle
Eine weiterentwickelte Version der Ossek- Lösung
Benutzerdefinierter Filter ist besser geeignet, dann können Sie ihn überall im Projekt verwenden
js Datei
var myApp = angular.module('myApp',[]); myApp.filter('utcdate', ['$filter','$locale', function($filter, $locale){ return function (input, format) { if (!angular.isDefined(format)) { format = $locale['DATETIME_FORMATS']['medium']; } var date = new Date(input); var d = new Date() var _utc = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()); return $filter('date')(_utc, format) }; }]);
in Vorlage
<p>This will convert UTC time to local time<p> <span>{{dateTimeInUTC | utcdate :'MMM d, y h:mm:ss a'}}</span>
quelle
input
die Zeichenfolge "UTC" am Ende enthalten würde.$locale['DATETIME_FORMATS']['medium']
anstelle des festen Fallback-Formats zu verwenden? Auf diese Weise verwenden Sie die eigene Lokalisierung von Angular. Ihr Format sieht schrecklich aus wie das en_US-Format, das überall auf der Welt sehr ungewöhnlich istWenn Sie moment.js verwenden, verwenden Sie die Funktion moment (). Utc (), um ein Moment-Objekt in UTC zu konvertieren. Mit der Funktion moment (). Format () können Sie auch ein schönes Format innerhalb des Controllers anstelle der Ansicht verarbeiten. Zum Beispiel:
moment(myDate).utc().format('MM/DD/YYYY')
quelle
moment().utc(myDate).format('MM/DD/YYYY')
Nach einigen Recherchen konnte ich eine gute Lösung für die Umrechnung von UTC in Ortszeit finden. Schauen Sie sich die Geige an. Hoffe es hilft
https://jsfiddle.net/way2ajay19/2kramzng/20/
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app ng-controller="MyCtrl"> {{date | date:'yyyy-mm-dd hh:mm:ss' }} </div> <script> function MyCtrl($scope) { $scope.d = "2017-07-21 19:47:00"; $scope.d = $scope.d.replace(" ", 'T') + 'Z'; $scope.date = new Date($scope.d); } </script>
quelle
Sie haben auch die Möglichkeit, einen benutzerdefinierten Filter für Ihr Datum zu schreiben, der ihn im UTC-Format anzeigt. Beachten Sie, dass ich verwendet habe
toUTCString()
.var app = angular.module('myApp', []); app.controller('dateCtrl', function($scope) { $scope.today = new Date(); }); app.filter('utcDate', function() { return function(input) { return input.toUTCString(); }; });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> <div ng-app="myApp" ng-controller="dateCtrl"> Today is {{today | utcDate}} </div>
quelle
Könnte es funktionieren, den Filter folgendermaßen zu deklarieren?
app.filter('dateUTC', function ($filter) { return function (input, format) { if (!angular.isDefined(format)) { format = 'dd/MM/yyyy'; } var date = new Date(input); return $filter('date')(date.toISOString().slice(0, 23), format); }; });
quelle
Wenn Sie in .Net arbeiten, fügen Sie in web.config Folgendes hinzu
<system.web>
wird Ihr Problem lösen:
<globalization culture="auto:en-US" uiCulture="auto:en-US" />
quelle