2012-02-27 10 views
0

自分のアンドロイドスマートフォンアプリケーション(自分で作成)から、私の所在地と時間を保存するためにデンバーのサーバーにリクエストを送信します。それが保存するTIMESTAMPはデンバーの現在時刻(現地時間から9時間の差)です。今、私は私が24時間を過ぎて私を見せたかったのでかのように私のPHPスクリプトでタイムスタンプとタイムゾーンを使用しています

$query = "SELECT * FROM `tblLoc` WHERE datetime > (CURRENT_TIMESTAMP - 86400)"; 

を書いた最後のリクエストから16時間....

後にこれが間違いでした!

$query = "SELECT * FROM `tblLoc` WHERE datetime > CURRENT_TIMESTAMP() - INTERVAL 24 HOUR"; 

in SQL 86400!= 24時間!

+0

テーブルtblLocの挿入または更新に使用するクエリを追加できますか? –

+0

あなたの質問をその本質にまで煮詰めてください。あなたが問題をあなたの記述にすることができる方法はありますか?**短い**と**明確な**? –

+0

私は質問がかなり明確だと思います。彼のサーバーはデンバー時代にあったが、彼はアジア/エルサレム時代にそれを必要とする。彼はこれによって期待している結果を得ていない。おそらく問題は少し長引いているかもしれませんが、私は問題が十分にはっきりしていると思います。 – Travesty3

答えて

1

ので、同様にあなたは、代わりにPHPののMySQL's time zoneを変更したり、PHPは、タイムスタンプを提供するようにクエリを変更するか必要があります。コメント

UTC_TIMESTAMP()に基づいて

$query = "SELECT * FROM tblLoc WHERE dateTime > (". time() ." - 86400)"; 


EDITがあるかもしれません良い方法ですが、 CURRENT_TIMESTAMP()に基づいていないので、この同じタイムスタンプに基づいて挿入/更新していることを確認してください。

UTCタイムスタンプは、GMT(グリニッジ標準時)に基づいており、GMT + 0です。ダラスはGMT-6、アジア/エルサレムはGMT + 2です。したがって、UTC_TIMESTAMP()は、現在のタイムゾーンの設定に関係なく、GMTタイムゾーンの現在の時刻を常に意味します。 CURRENT_TIMESTAMP()は、現在のタイムゾーンの現在の時刻を意味します。

HOWEVER結果がまだ正しくない可能性があります。彼らはちょうどその時に見えるかもしれませんが、数時間で外れるかもしれません。しかし、CURRENT_TIMESTAMPに基づいて挿入および更新してからUTC_TIMESTAMPに基づいて選択すると、結果が正しくなりません。

    は、アジア/エルサレムにサーバーのタイムゾーンを切り替え
  1. (変更を適用するには、MySQLを再起動してください):

    私は、次の3つのソリューションのいずれかをお勧めします。

  2. 'SET time_zone = timezone;'を使用して、各スクリプトの先頭にタイムゾーンを設定します。
  3. TZ環境変数を正しいタイムゾーンに設定して、MySQLが起動時にタイムゾーンをデフォルトとして設定するようにします(MySQLを再起動してください)。
+0

@qpaycm:更新された回答を参照してください。また、私の答えがあなたの問題の解決策だったら、この投稿の投票ボタンの下にあるチェックマークを使ってあなたの受け入れられた回答としてマークしてください。 – Travesty3

+0

@qpaycm:私のせいで、それは分かりませんでした。更新された回答を再度ご覧ください。 – Travesty3

+0

strange :)私はちょうどDATE_SUB(CURRENT_TIMESTAMP()、INTERVAL 3 HOUR)を完璧に試しました!それは86400!= 1dayと思われる - これが問題だった – qpaycm

関連する問題