状況は次のとおりです。
occurred_at
データベースに UTC で日付を保存しています。laravel を使用して、これらのoccurred_at
フィールドを含むレコードを返す API メソッドを作成しています。これらは現在、JSON を介して文字列形式 (PHP Carbon ライブラリが出力するもの) で返されています。例:
"occurred_at":"2015-04-14 00:25:20"
この日付は UTC タイムゾーンの00:25
( 12:25 AM
) に「発生」しましたが、実際には太平洋 (PST) タイムゾーンの2015-04-13 17:25
( ) に発生しました。5:25 PM
私は angular を使用して JSON を使用しており、angular-moment ライブラリを使用して UTC をローカルに変換すると考えました。しかし、それは機能していません。角度モーメント フィルターとネイティブ角度フィルターの両方が同じものを出力します。
<span>{{evt.occurred_at | amDateFormat:'L LT'}}</span>
<span>{{evt.occurred_at | date:'MM/dd/yyyy @ h:mma'}}</span>
出力:
2015-04-14 00:25:20
まだUTCです。私のangularアプリコードでは、UTCプリプロセッサをセットアップしてUTCとして読み込むことさえありますが、現地時間として表示されません:
.constant('angularMomentConfig', {
preprocess: 'utc'
})
これには標準的な方法が必要です。日時の値をUTCでデータベースに保存しますが、ユーザーにはローカル時間として表示します。サーバー側に変更を加える必要がありますか? クライアント側?表示したい日付ごとに大量のコードを書かずに、「うまくいく」方法を利用するためのベストプラクティスは何ですか?
現在、角度のないプロジェクトでは、時間をローカルに変換するすべてのスパンに css クラスを適用することにより、「ハック」と見なされるものを使用しています。
$('.utc-dttm').each(function () {
var t = moment.utc($(this).text()).local();
$(this).text(t.format("L") + ' ' + t.format("LT"));
});
しかし、私はこれが間違った方法であると主張します。