MySQL DATETIME フィールドに UTC タイムゾーンで時刻を保存します。これらすべて (PHP で使用する場合) をユーザー定義のタイムゾーンに変換したいと考えています。私はphp DateTime::setTimezoneでそれを行うことができることを知っていますが、それらのそれぞれに対してそれぞれ行う必要があります.
mysqlからのすべての日時がUTCであることをphpに伝え、それらを自動的にユーザーのタイムゾーンに変換するグローバルな方法はありますか?
それらをデータベースに保存するときは、テーブル列を UNIX タイムスタンプとして保存します。これらはすべて UTC です。次に、必要なユーザー指定のオフセットを適用します。
ここに興味深いStackOverflow の質問があります。
また、MySQL の Unix_Timestamp 関数を使用して、比較を行うときに適切な int を生成することにより、データを簡単にクエリすることもできます。
編集:使用するたびにデータベースからすべての日時を変換したいことが確実な場合は、日時を取得してユーザーの正しいオフセットを追加する単純な関数を作成し、摘み取るたびにその関数を呼び出すだけですデータベースからの日時。以下のコードのように:
<?php
// Assuming that $_SESSION['UserOffset'] is storing the user's timezone eg
// $_SESSION['UserOffset'] = new DateTimeZone("Europe/Prague");
function convert_time_zone($timeFromDatabase_time)
{
$userTime = new DateTime($timeFromDatabase, new DateTimeZone('UTC'));
$userTime->setTimezone(new DateTimeZone($_SESSION['UserOffset']));
return $userTime->format('Y-m-d H:i:s');
// or return $userTime; // if you want to return a DateTime object.
}
?>