Web アプリケーションで日付を処理するために Moment.js を使用しています。サーバーはすべての日付を UTC ミリ秒単位で返します。ここで、(ユーザー設定に基づいて) 特定のタイムゾーンを適用する日付を表示する必要があります。
momentjs へのすべての呼び出しを変更して処理する代わりに、タイムゾーンをグローバルに設定する方法はありますか?
Web アプリケーションで日付を処理するために Moment.js を使用しています。サーバーはすべての日付を UTC ミリ秒単位で返します。ここで、(ユーザー設定に基づいて) 特定のタイムゾーンを適用する日付を表示する必要があります。
momentjs へのすべての呼び出しを変更して処理する代わりに、タイムゾーンをグローバルに設定する方法はありますか?
npm install moment-timezone
var moment = require('moment-timezone');
通常の代わりにこのオブジェクトを使用しますmoment
。moment.tz.setDefault(String);
ここで、String はタイム ゾーン識別子です。例えば:
var moment = require('moment-timezone');
moment.tz.setDefault("America/New_York");
同じ Web サイト ( http://momentjs.com/timezone/ ) にある moment-timezone ライブラリを使用し ます。次のようなことができます。
moment(utcDateTime).tz(settings.timezone).format(settings.dateFormat);
UTC をユーザーのタイムゾーンに変換するサービス関数を持つユーザー クラス/オブジェクトを実装することをお勧めします。このフィドルを見てください:
http://jsfiddle.net/guidosch/ofd4unhu/4/
日付は UTC として提供されますが、ビューはユーザー クラスの日付フォーマット メソッドを使用して、ユーザーの設定に従って UTC 日付を調整およびフォーマットします。
私は広範なテストを行っていませんが、大雑把なテストでは正しく見えます。Moment Timezone 0.0.1 でこれを行うことができました。
var serverTimezoneOffset = <?php echo timezone_offset_get(new DateTimeZone(date_default_timezone_get()), new DateTime('now')) / -60; ?>;
moment.updateOffset(new Date().getTimezoneOffset()-serverTimezoneOffset);