javascript angularjs date timezone-offset

javascript - AngularJS global Fecha zona horaria de desplazamiento



ng-repeat (3)

Estoy buscando para mostrar fechas relativas a las zonas horarias de los usuarios.

Mi esperanza es que Angular tenga la forma de configurar globalmente el filtro de Date para hacer esto; tener que hacerlo manualmente en una base de caso por caso se siente mal.

Mis marcas de tiempo ya están envueltas en una función de timestamp() (simplemente para multiplicar por 1000), pero preferiría no modificar esa función si no tengo que hacerlo.

Editar:

Estoy haciendo esto, y funciona, pero como se indicó anteriormente, me gustaría establecer un nivel más alto si es posible

$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; };



De la documentación oficial:

Zonas horarias

Tenga en cuenta que el filtro de fecha y hora angular utiliza la configuración de zona horaria del navegador. Por lo tanto, la misma aplicación mostrará información de tiempo diferente según la configuración de zona horaria de la computadora en la que se ejecuta la aplicación. Ni Javascript ni Angular actualmente admiten la visualización de la fecha con una zona horaria especificada por el desarrollador.

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

Un nivel ''más alto'' podría estar creando un tipo de contenedor (clase AKA, ...) con su función como constructor. Esto debe estar codificado en el punto de entrada de la aplicación para que sea posible usarlo en todas partes.


Entonces, gracias a los cambios en 1.4.x angular esto es ahora trivial. La forma correcta de manejar esto sería crear un decorador que modifique el filtro de fecha incorporado antes de que se ejecute. Esto es trivialmente fácil y no tendrá un impacto en el rendimiento.

Este es uno que yo uso. Simplemente agrega un DEFAULT_TIMEZONE si no se especifica una zona horaria. Esto tiene el efecto de mover todas las fechas en la aplicación a GMT siempre que no se proporcione ninguna otra zona horaria.

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; }]); }]);