Angular: date filter ajoute un fuseau horaire, comment afficher UTC?

j'utilise le filtre date pour afficher un horodatage unix dans un certain format. J'ai remarqué que le filtre ajoute le fuseau horaire local à la sortie.

est-il possible de simplement afficher l'horodatage exact, sans ajouter d'informations sur le fuseau horaire?

entrée:

talk.content.date_and_time = 1400167800 

(est 05 / 15 / 14 @ 3:30:00 UTC)

Code:

{{talk.content.date_and_time*1000 | date:'dd-M-yyyy H:mm Z'}}

sortie:

15-5-2014 17:30 +0200

Comment puis-je faire la sortie 15:30 au lieu de 17:30?

30
demandé sur Squrler 2014-02-14 19:10:59

4 réponses

le' Z ' est ce qui ajoute l'information timezone. Quant à la sortie UTC, cela semble être le sujet d'une certaine confusion -- les gens semblent graviter vers le moment .js .

en empruntant ce réponse , vous pourriez faire quelque chose comme cela sans moment.js:

contrôleur

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;

  }]);

modèle

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

voici plunker jouer avec

Voir aussi ce et ce .

notez aussi qu'avec cette méthode, si vous utilisez le " Z " du filtre de date D'Angular, il semble qu'il imprimera toujours votre décalage horaire local.

26
répondu ossek 2017-05-23 10:31:36

depuis la version 1.3.0 AngularJS introduit le paramètre de filtre supplémentaire timezone , comme suit:

{{ date_expression | date : format : timezone}}

mais dans les versions 1.3.x seul timezone pris en charge est UTC , qui peut être utilisé comme suit:

{{ someDate | date: 'MMM d, y H:mm:ss' : 'UTC' }}

depuis la version 1.4.0-rc.0 AngularJS supporte aussi d'autres fuseaux horaires. Je ne testais pas tous les fuseaux horaires possibles, mais voici par exemple comment vous pouvez obtenir la date au Japon heure normale (JSP, GMT +9):

{{ clock | date: 'MMM d, y H:mm:ss' : '+0900' }}

ici vous pouvez trouver de la documentation sur les filtres date AngularJS.

NOTE: cela ne fonctionne qu'avec L'Angle 1.x

Voici exemple pratique

77
répondu edufinn 2017-01-23 08:38:25

le filtre date formate toujours les dates en utilisant le fuseau horaire local. Vous devrez écrire votre propre filtre, basé sur les méthodes getUTCXxx() de Date , ou sur une bibliothèque comme moment.js .

0
répondu JB Nizet 2014-02-14 16:23:35

je viens d'utiliser la fonction getLocaleString() pour mon application. Il doit adapter le format de temps commun à la locale, donc no + 0200 etc. Bien sûr, il y aura moins de possibilité de contrôler la largeur de votre chaîne.

var str = (new Date(1400167800)).toLocaleString();
0
répondu rq4t 2016-02-10 23:15:28