2014-02-17 109 views
17

我在尋找顯示與用戶時區相關的日期。AngularJS全局日期時區偏移量

我希望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; 
}; 

回答

18

所以,由於角度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; 
    }]); 
}]); 
10

從官方文檔:

時區

請即角日期時間過濾器使用的時區設置心中的瀏覽器 。因此,相同的應用程序將顯示不同的時間 信息,具體取決於運行應用程序的計算機的時區設置。 Javascript和Angular 當前都不支持按照開發人員指定的時區顯示日期。

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

A級 '更高' 可以創造你的功能構造的包裝(AKA級,...)。這應該在應用程序的入口處編碼,以便在任何地方使用它。

+0

'你的函數作爲構造函數的包裝類型(AKA類,...)。你能在這裏詳細說明嗎?你有一個例子嗎? – couzzi

+1

這不再有效。 Angular的date $ filter現在支持第三個參數'timezone'。 Thill取'UTC','GMT'或者像這樣指定的時區偏移量:'+ 0430'。要回答couzzi的問題,下一個問題是可以在某些配置中設置爲在沒有時區時總是應用「GMT」。 – thegreenpizza