日付と時刻の処理方法を本格的にリファクタリングする前に、これが機能するかどうかを尋ねたかったのです。
私の質問を組み立てるために、ここに私の問題があります...ユーザーが行った「アクション」を履歴テーブルに保存します。これらのアクションにはタイムスタンプがあります。ユーザーは世界中にいる可能性があるため、タイムゾーンが異なります。履歴にアイテムを表示し、タイムスタンプを自分のローカル タイムゾーンで表示したい。
また、日時フィールドを使用して UTC 時刻形式を単純に保存できることはわかっていますが、タイムスタンプを使用することを選択しているため、デフォルトを現在の時刻に設定できます。
これは私の問題でうまくいきますか?
私のサーバーのタイムゾーンはロサンゼルスになります
タイムスタンプをタイムスタンプとして MySQL に保存します。私の理解では、タイムスタンプは常に UTC として保存されます。レコードはデフォルトで creation_date として保存されるか、明示的に UTC_TIMESTAMP() を設定します。事実上、データベース内のすべてのレコードは UTC になります。
ユーザーがログインすると、タイムゾーンを取得します (これをユーザー設定としてデータベースに保存します)。この例では、この人物がニューヨークにいるとします。
ここに私の質問があります。これらのいずれかが機能しますか?
- a) 履歴データを取得します。すべてのタイムスタンプは、UTC からロサンゼルス時間に自動的に変換されます。各履歴項目について、ロサンゼルスのタイムスタンプをニューヨークのタイムスタンプに変換してエコーします。
また
- b) PHP タイムゾーン「date_default_timezone_set」をニューヨークに設定します。履歴データを取得します。すべてのタイムスタンプはまだロサンゼルス時間であり、サーバーはまだロサンゼルス時間です。「date_default_timezone_set」はロサンゼルスのタイムスタンプをニューヨークに自動的に変換するため、各履歴項目についてタイムスタンプをエコーするだけです。
オプション 4b は機能しますか? ロサンゼルス時間からニューヨーク時間に変換するより良い方法はありますか?
一般的にこれを行うより良い方法はありますか?