0

表の詳細に基づいて、「現在利用可能な」レコードを選択したいと思います。簡単なはずだと思いますが、もちろん見ていません。ここで質問することで、自分の質問に答えられるように頭をジョギングできることを願っています。

私は2つのテーブルを持っています:

table_1  
    id  
    time_zone_name (eg, "US/Eastern")

table_2  
    tab1_id  
    day_of_week (1=Monday, 7=Saturday)

現在のGMTタイムスタンプが「2012-07-0813:35:00 GMT」であることがわかっている場合、タイムゾーンを調整した後、table_2.day_of_weekが一致するtable_1からレコードを選択できるはずです。

MySql関数CONVERT_TZは有望に見えました!

CONVERT_TZ( '2004-01-01 12:00:00'、'GMT'、'MET')
CONVERT_TZ( '2004-01-01 12:00:00'、'+ 00:00'、'+ 10:00 ');

私はこれを試すことができた:

SELECT id from table_1 inner join table_2 ON(table_1.id = table_2.table_1_id)
WHERE DAYOFWEEK(CONVERT_TZ(UTC_TIMESTAMP、'GMT'、table_1.time_zone_name))= table_2.day_of_week

ただし、CONVERT_TZ関数は、ホストにインストールされているMySqlの「US/Eastern」などのゾーン名を受け入れません。MySqlドキュメントによると:

「MET」や「Europe/Moscow」などの名前付きタイムゾーンを使用するには、タイムゾーンテーブルを適切に設定する必要があります。

どうやらそれらは適切に設定されていません。

これについてもっと良い方法はありますか?任意の提案をいただければ幸いです。

4

1 に答える 1

0

ルックアップ テーブルを使用して違いを取得している場合は、サイト ユーザーにどこにあるかを尋ねているはずです。それらがその場所に入ると、PHP を使用して、スクリプトを介して簡単にローカライズを設定できます。これは、 php のローカリゼーションを使用すると非常に簡単です。タイムゾーンのリストは実に膨大です。米国/東部の例が含まれていますが、下位互換性のために(「その他」の下で)のみ維持されているため、tを実装することはお勧めしません。

次に、これを使用してphp dateを使用しdate('Z')て、オフセットを秒単位で取得できます。日時フィールドを UNIX タイムスタンプとして保存する場合、それらのオフセットを加算または減算するのは簡単なことです。このようにして、保存するデータを正規化し、ゼロ オフセット (GMT) に保ちます。

データベース内のデータをクエリするときは、上記の手順で取得したオフセットを結果の出力に追加するだけです。再度使用date()して、日付/時刻をローカル形式の形式にフォーマットすることもできます。

于 2012-07-10T01:20:12.743 に答える