2011-12-13 8 views
0

私のMySQLデータベースには、YYYY-MM-DDや時刻00:00:00のような日付形式のイベントがあります。 私のSELECTクエリがdbaseからの時間、タイムゾーンと真夜中

$STH_1 = $DBH->query("SELECT table_name       
         FROM information_schema.tables       
         WHERE table_name       
         LIKE 'v_c_ei\_9%'"); 
$stmts_1 = array(); 

foreach($STH_1 as $row_1) { 

$stmts_1[] = sprintf("SELECT * 
         FROM %s 
        WHERE date='%s'", $row_1['table_name'], $date); 

} 

$stmt_1 = implode("\nUNION\n", $stmts_1); 
$stmt_1 .= "\nORDER BY time ASC"; 

$STH_5_2 = $DBH->query($stmt_1); 

のように見える日付変数は、YYYY-MM-DDのような典型的な日付形式です。

F.ex. DATEと時刻23:30:00(すべての時間UTC)にイベントがあります。そして、私は別のタイムゾーン(f.ex. + 1.00)からの1人のユーザーを持っています。彼の場合、システムはDATEと時刻23:30:00ではなく、DATE + 1と時刻00:30:00のイベントを表示する必要があります。しかし、現時点では、このイベントはDATEと時刻00:30:00(日付ではなく時間のみが変更されます)で表示されます。

表示されるすべての受信イベントは、00:00:00から23:59:59の時間を持つ1つのDATEからのみでなければなりません。

ユーザーのタイムゾーンとの相関を使用して正しい日時を受け取るには(メインのSELECTクエリで)多分変更する必要がありますか?

+0

'TIMESTAMP'と' DATETIME'/'DATE' /' TIME'フォーマットの違いは分かりますか? – Tadeck

+0

私が書いたように、私は日付(形式はYYYY-MM-DD)と時刻(形式は00:00:00)で、TIMESTAMPは使用しません。 – Andrew

+0

この情報は、アプリケーションを通じて問題のユーザーに提供されていますか? –

答えて

0

あなたが記述した詳細はユーザー固有のロジックなので、理想的にはできるだけ遅くまでその書式を残すことが理想的です。一般に、データベースとアプリケーションロジックでUTCの日付を処理し、ユーザーに表示するときにUTCの日付のみを処理することをお勧めします。

DateTime objectをご利用いただきありがとうございますか?データベースクエリから新しいインスタンスに日付をロードし、ユーザーの設定とsetTimezone() methodに基づいてオブジェクトを操作することができます。

+0

thnks、しかし..それは今私を助けていない。 – Andrew

+0

この場合、おそらくMySQLの[CONVERT_TZ()関数](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_convert -tz)。 – cmbuckley

関連する問題