2

MySQL DATETIME フィールドに UTC タイムゾーンで時刻を保存します。これらすべて (PHP で使用する場合) をユーザー定義のタイムゾーンに変換したいと考えています。私はphp DateTime::setTimezoneでそれを行うことができることを知っていますが、それらのそれぞれに対してそれぞれ行う必要があります.

mysqlからのすべての日時がUTCであることをphpに伝え、それらを自動的にユーザーのタイムゾーンに変換するグローバルな方法はありますか?

4

1 に答える 1

3

それらをデータベースに保存するときは、テーブル列を 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.
    }


?>
于 2012-07-10T12:17:51.497 に答える