AngularJS全局日期时区偏移量

时间:2014-02-17 23:30:39

标签: javascript angularjs date timezone-offset

我希望显示相对于用户时区的日期。

我希望Angular能够全局配置Date过滤器来执行此操作 - 必须根据具体情况手动执行此操作感觉不对。

我的时间戳已经包含在timestamp()函数中(只需乘以1000),但如果我没有 ,我宁愿不修改该函数。< / p>

修改

我正在这样做,并且它有效,但如上所述,我想在可能的情况下将此级别提高一级

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

3 个答案:

答案 0 :(得分:21)

所以,由于角度1.4.x的变化,现在这是微不足道的。处理这个问题的正确方法是创建一个装饰器,它在运行之前改变内置日期过滤器。这很简单,不会对性能产生影响。

这是我使用的。如果没有指定时区,它只会添加一个DEFAULT_TIMEZONE。这样就可以将应用程序中的所有日期移动到GMT,只要没有给出其他时区。

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

答案 1 :(得分:10)

来自官方文件:

  

时区

     

请记住,Angular日期时间过滤器使用时区设置   的浏览器。因此相同的应用程序将显示不同的时间   信息取决于计算机的时区设置   应用程序正在运行。既不是Javascript也不是Angular   目前支持使用指定的时区显示日期   开发者。

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

级别“更高”可以使用您的函数作为构造函数创建包装器类型(AKA类,...)。这应该在应用程序的入口点编码,以便可以在任何地方使用它。

答案 2 :(得分:1)

您是否已查看momentjs http://momentjs.com/

还有角度时区,但我不能说那个包(https://github.com/michaelahlers/angular-timezones)。