web-dev-qa-db-ja.com

AngularJSグローバル日付タイムゾーンオフセット

ユーザーのタイムゾーンに関連する日付を表示したいと考えています。

AngularがDateフィルターをグローバルに構成してこれを行う方法があることを願っています。ケースバイケースで手動でこれを行うことは間違っているように感じます。

私のタイムスタンプは既にtimestamp()関数でラップされています(単に1000倍するだけです)が、haveに。

編集:

私はこれをやっていて、うまくいきますが、上記のように、可能であればこれを1レベル高く設定します

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

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

公式ドキュメントから:

時間帯

Angular datetimeフィルターはブラウザーのタイムゾーン設定を使用することに注意してください。したがって、同じアプリケーションは、アプリケーションが実行されているコンピューターのタイムゾーン設定に応じて、異なる時間情報を表示します。 JavaScriptもAngularも、現在、開発者が指定したタイムゾーンで日付を表示することをサポートしていません。

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

「より高い」レベルは、コンストラクターとして関数を使用してラッパーtype(AKAクラス、...)を作成することです。これは、どこでも使用できるように、アプリケーションのエントリポイントでコーディングする必要があります。

10
Mardie

momentjshttp://momentjs.com/ をチェックアウトしましたか?

Angular-timezonesもありますが、そのパッケージについて話すことはできません( https://github.com/michaelahlers/angular-timezones )。

1
JayInNyc