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;
};
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;
}]);
}]);
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.
Avez-vous vérifié momentjs
http://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 ).