web-dev-qa-db-fra.com

Décalage de fuseau horaire mondial AngularJS

Je cherche à afficher les dates par rapport aux fuseaux horaires des utilisateurs.

J'espère que Angular a un moyen de configurer globalement le filtre Date pour ce faire - devoir le faire manuellement au cas par cas se sent mal.

Mes horodatages sont déjà enveloppés dans une fonction timestamp() (simplement pour multiplier par 1000), mais je préférerais ne pas modifier cette fonction si je ne ( ai à.

Modifier:

Je fais cela, et cela fonctionne, mais comme indiqué ci-dessus, je voudrais régler ce niveau plus haut si possible

$scope.timestamp = function (unix_time) {
    var Epoch = (unix_time * 1000);
    var date = new Date();
    var localOffset = (-1) * date.getTimezoneOffset() * 60000;
    var stamp = Math.round(new Date(Epoch + localOffset).getTime());
    return stamp;
};
17
couzzi

Donc, grâce aux changements de angular 1.4.x, c'est maintenant trivial. La bonne façon de gérer cela serait de créer un décorateur qui modifie le filtre de date intégré avant son exécution. C'est trivial facile et n'aura pas d'impact sur les performances.

C'est celui que j'utilise. Il ajoute simplement un DEFAULT_TIMEZONE si aucun fuseau horaire n'est spécifié. Cela a pour effet de déplacer toutes les dates de l'application vers GMT tant qu'aucun autre fuseau horaire n'est indiqué.

module.config(['$provide', function($provide) {
     var DEFAULT_TIMEZONE = 'GMT';

     $provide.decorator('dateFilter', ['$delegate', '$injector', function($delegate, $injector) {
       var oldDelegate = $delegate;

       var standardDateFilterInterceptor = function(date, format, timezone) {
         if(angular.isUndefined(timezone)) {
           timezone = DEFAULT_TIMEZONE;
         }
         return oldDelegate.apply(this, [date, format, timezone]);
       };

       return standardDateFilterInterceptor;
     }]);
}]);
21
thegreenpizza

De la documentation officielle:

Fuseaux horaires

Gardez à l'esprit que Angular datetime utilise les paramètres de fuseau horaire du navigateur. Par conséquent, la même application affichera des informations d'heure différentes selon les paramètres de fuseau horaire de l'ordinateur sur lequel l'application s'exécute. Ni Javascript ni Angular prend actuellement en charge l'affichage de la date avec un fuseau horaire spécifié par le développeur.

http://docs.angularjs.org/guide/i18n

Un niveau 'supérieur' pourrait être de créer un type wrapper (classe AKA, ...) avec votre fonction de constructeur. Celui-ci doit être codé au point d'entrée de l'application pour pouvoir être utilisé partout.

10
Mardie

Avez-vous vérifié momentjshttp://momentjs.com/ ?

Il y a aussi des fuseaux horaires angulaires, mais je ne peux pas parler de ce paquet ( https://github.com/michaelahlers/angular-timezones ).

1
JayInNyc