【问题标题】:AngularJS global Date timezone offsetAngularJS 全局日期时区偏移量
【发布时间】:2014-03-17 11:26:54
【问题描述】:

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

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

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

编辑:

我正在这样做,它有效,但如上所述,如果可能,我想将其设置为更高的级别

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

【问题讨论】:

    标签: javascript angularjs date timezone-offset


    【解决方案1】:

    你检查过momentjshttp://momentjs.com/吗?

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

    【讨论】:

    • 我使用了 momentjs,它很棒,但在这种情况下,Angular 可以完美地处理日期——除了这个时区。
    【解决方案2】:

    来自官方文档:

    时区

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

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

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

    【讨论】:

    • a wrapper type (AKA class, ...) with your function as constructor. 你能详细说明一下吗?你有例子吗?
    • 这不再有效。 Angular 的日期 $filter 现在支持第三个参数“时区”。采用“UTC”、“GMT”或像这样指定的时区偏移量:“+0430”。要回答 couzzi 的问题,下一个要问的问题是,是否可以在某些配置中将其设置为在不存在时区时始终应用“GMT”之类的内容。
    【解决方案3】:

    因此,由于 Angular 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;
         }]);
    }]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 2019-03-09
      • 2021-12-19
      • 1970-01-01
      • 2017-03-31
      相关资源
      最近更新 更多