0

phpを使用してAPIを開発しており、クエリ結果をJSON文字列として送信しています。結果は、複数のテーブルの組み合わせです。ただし、フィールドの1つは時間です。別のテーブルのタイムゾーン設定に基づいて、これを別のタイムゾーンに変換する必要があります。

現在の出力は次のとおりです。

     Array ( "Show_name" => "Billards",
             "Show_type" => "Movie",
             "Start_Time" => "2011-11-09 07:00:00",
             "End_Time" => "2011-11-09 09:00:00",
             "Open" => "Yes"
           );

開始時刻と終了時刻は、デフォルトですべてのレコードのESTにあります。タイムゾーン設定は、フィールドTimezone_ID、GMT_offset、DST_offsetを持つ別のテーブルに保存されます。これらの設定に基づいて、デフォルトでestであるstart_timeとend_timeをそれぞれのタイムゾーンに変換する必要があります。

私は当初、クエリ自体からこの権利を計算するMySQL関数を作成することを計画していました。そうすれば、JSON形式/フィールドは変更されません。しかし、PHP関数に比べると遅すぎます。

あなたの経験に基づいて何を提案しますか?-クエリで簡単に計算する方法はありますか?-MySQL関数はPHPよりもパフォーマンスが優れていますか?-php関数を使用する必要がある場合は、これを計算するためにすべてのレコードをループする必要があります。タイムゾーンレコードを個別に取得する必要があるかどうかわかりません。JSON応答のフィールドの形式/数を変更したくないためです。

他のより良い方法はありますか?

4

1 に答える 1

1

私は通常、データベース側でこれを行います。すべての日付を UTC としてデータベースに保存することに注意してください。

したがって、ユーザーのローカル タイム ゾーンでユーザーにデータを表示するには、次のようにします。

SELECT Show_name, Show_type,
  Start_time, CONVERT_TZ(Start_time, 'UTC', 'EST') AS Start_time_local
FROM Shows

「EST」は、ユーザーが設定で選択したタイムゾーンです。

タイムゾーンはスキーマに保存されないため、データベースの日付を EST から UTC に変更する場合、スキーマを変更する必要はありません。

すべての日付を EST から UTC に変換するには、次のようにします。

UPDATE Shows
SET Start_time = CONVERT_TZ(Start_time, 'EST', 'UTC')
于 2012-04-24T19:43:57.950 に答える