2012-04-24 24 views
0

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

は、現在出力されます。

 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の各フィールドを持つ別のテーブルに格納されます。これらの設定に基づき、デフォルトではstart_timeとend_timeがそれぞれのタイムゾーンに変換されます。

私は当初、クエリ自体からこの権利を計算するためのMySQL関数を作成する予定でした。つまり、JSON形式/フィールドは変更されません。しかし、私は、PHP関数に比べて遅すぎるその方法を参照してください。

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

その他の方法はありますか?

+0

あなたはUTCでデータベース内のすべての回を保存したり、UTCは、あなたがそれを調整する必要がある場合、それは人生がずっと楽になりますタイムスタンプ場合異なるタイムゾーン。 ESTでは、希望のタイムゾーンに変換する前に、ESTオフセットとDSTを考慮する必要があります。しかし、それを変更するには遅すぎるかもしれません。 – drew010

+0

@ drew010、はい、私はこの時点でDBスキーマを変更できません:-( –

+1

[CONVERT_TZ()](http://dev.mysql.com/doc/refman/5.5/en/date-and)を見ましたか? -time-functions.html#function_convert-tz)? – drew010

答えて

1

私は一般的にこれをデータベース側で行います。すべての日付をUTCとしてデータベースに格納することに注意してください。

ので、ユーザーのローカルタイムゾーンでユーザーにデータを表示するために、私はこのような何かを:「EST」は、ユーザーが自分の好みで選択したタイムゾーンです

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

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

がUTCにESTからすべてのあなたの日付を変換するには、単純に次の操作を行います。

UPDATE Shows 
SET Start_time = CONVERT_TZ(Start_time, 'EST', 'UTC') 
関連する問題