ユーザーのタイムゾーンに関連する日付を表示したいと考えています。
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;
};
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;
}]);
}]);
公式ドキュメントから:
時間帯
Angular datetimeフィルターはブラウザーのタイムゾーン設定を使用することに注意してください。したがって、同じアプリケーションは、アプリケーションが実行されているコンピューターのタイムゾーン設定に応じて、異なる時間情報を表示します。 JavaScriptもAngularも、現在、開発者が指定したタイムゾーンで日付を表示することをサポートしていません。
http://docs.angularjs.org/guide/i18n
「より高い」レベルは、コンストラクターとして関数を使用してラッパーtype(AKAクラス、...)を作成することです。これは、どこでも使用できるように、アプリケーションのエントリポイントでコーディングする必要があります。
momentjs
http://momentjs.com/ をチェックアウトしましたか?
Angular-timezonesもありますが、そのパッケージについて話すことはできません( https://github.com/michaelahlers/angular-timezones )。