Laravel の結果をユーザーに返すときに、タイムゾーンが正しく表示されません。
P粉536909186
P粉536909186 2023-07-27 11:05:57
0
1
489
<p>Laravel API を使用していますが、アプリケーションのタイムゾーンは UTC に設定されています。 MySQL のタイムゾーンは SYSTEM に設定されており、これは UTC とも表されます。また、users テーブルには、ユーザーのタイムゾーン情報を保存する列もあります。 <br /><br />私のフロントエンド インターフェイスには、ユーザーが特定のプロセスの時刻として日付/時刻を入力できるフィールドがあり、この時刻はユーザーの時刻で API に送信されます。ゾーン。したがって、そのレコードが保存されるときに、それを UTC に変換してから、次のようにデータベースに挿入します。</p><p><br /></p> <pre class="brush:php;toolbar:false;">auth()->user()->procedure()->create([ 'procedure_time' => Carbon::parse($request->procedure_time, auth()->user()->timezone)->setTimezone('UTC'), ]); </pre> <p>現在のユーザーのタイムゾーンで当日のすべてのユーザープロセスのレコードを取得し、その結果をフロントエンドに返そうとしています。結果は正しいと思っていましたが、コンピューターが真夜中になっても、結果は約 10 時間ほど、前日の記録として表示されたままでした。これが、これらの結果を返そうとする方法です;</p> <pre class="brush:php;toolbar:false;">$todayProcedures = Procedure::query() ->where('user_id', $user->id) ->whereDate('procedure_time', '>=', Carbon::now()->startOfDay()->tz($user->timezone)) ->whereDate('procedure_time', '<=', Carbon::now()->endOfDay()->tz($user->timezone)) ->get(); </pre> <p>どこで間違ったのか分かりません。 </p>
P粉536909186
P粉536909186

全員に返信(1)
P粉006977956

whereBetween メソッドを使用し、ユーザーのタイムゾーンを使用して 1 日の開始と終了を変換しました。こうすることで、ユーザーの現地時間に基づいてデータベースがクエリされ、正しい結果が得られるはずです。

リーリー

アプリケーションでタイムスタンプを扱う場合、タイムゾーン変換を正しく処理することが重要です。一貫性と正確性を確保するには、次のガイドラインに従ってください。

  1. データベース ストレージ: タイムスタンプは常に UTC 形式を使用してデータベースに保存します。これにより、特定のタイムゾーンに関係なく、すべてのタイムスタンプが標準化されます。
  2. クエリのタイム ゾーン変換: タイム ゾーンの変換は、レコードの挿入または更新時ではなく、データベースのクエリ時に実行されます。これにより、ユーザーのタイムゾーンに関係なく、データベースから取得されるデータの一貫性と正確さが保証されます。
  3. ユーザー タイム ゾーン ベースの表示: ユーザーにタイムスタンプを表示するとき、またはユーザーのタイム ゾーン設定に基づいて処理するときに、必要な変換を実行します。タイムスタンプをユーザーのタイムゾーンに調整することで、よりユーザーフレンドリーでローカライズされたエクスペリエンスを提供できます。
これらのガイドラインに従うと、アプリケーションは正確なタイムスタンプ データを維持し、異なるタイム ゾーン間でも一貫した結果を提供します。


いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!