2011-02-14 13 views
0

私は以下の問題があります。 PHPで2つのdatetime値を比較しようとしていますが、計算が無効です。違いは約8時間あります。 Y-M-DのH:I:■私は、データベース内のdatetime値は次の形式であるWAMPServerPHP日時比較

if(strtotime($date_time_from_db) < time()) 
{ 
    // do something 
} 

を使用して、私の開発マシン上でです。どうやってこれを正確に行うことができますか?また、time()を使うのは良い考えですか?ユーザーがマシンの時刻を変更するとどうなりますか?

ありがとうございました!

+0

いくつか実際の値を表示できますか?違いはタイムゾーンになる可能性があります –

+0

私はあなたのデータベースでタイムスタンプを使用することを提案しますが、それは私だけです。また、スクリプトがホストされているマシンからtime()が呼び出されたため、ユーザーが自分のマシンで時刻を変更しても問題ありません。一方、マシンの時間が変更されると、時間の不一致が発生する可能性があります。 –

+0

ほとんどの場合、「ユーザーがコンピュータの時刻を変更したらどうしますか?」と尋ねる大胆な取り組みを示しています。 – eykanal

答えて

2

データベースからこれらの値を取得する場合、PHPで日付と時刻の比較を行わないでください。これには、日付/時刻 - >テキスト - >日付 - 時間の2回の往復が含まれます。あなたは、データベース・レベルでまったく同じことを行うことができます

索引の使用(良い)を可能にし、(も良い)2型変換を排除
SELECT ... 
FROM table 
WHERE datetimefield < now() 

ユーザーの変更時間は、よく、それはユーザーのマシンです。これを販売用のアプリケーションの一部として実行している場合を除き、ユーザーはデータベースサーバーの時間に影響を与えることは絶対にありません。

+0

私はこれをデータベースに行かなくてもできると思っていましたが、これはうまくいくでしょう。ありがとうございました! – dtntcdr

+0

まあ、あなたの変数名は、あなたがデータベースを使ってデータを始めることを示唆しています。しかし、あなたのクエリが実際には単一の日付/時刻値をフェッチしている場合は、まずDBをunix_timestamp(単純な符号付き32ビット整数)に変換してください。これはPHPのネイティブな内部時間表現でもあります –

+0

これをテストしたところ、どうもありがとうございます!はい、私はすでにデータベースからデータを取得していたので、私はCurrentTimeとしてSELECT文NOW()に追加しました。 – dtntcdr