2011-09-13 6 views
1

my $ date_string変数に2010-9-30のような日付文字列があります。PHPの日付比較が予期せぬ動作をする

私はこのような文字列を比較する場合:

if (date('Y-m-d', strtotime("+20 days", $date_string))) 
{ 
    // it returns true for all dates 
} 

を比較が20日前にされていない、でも昨日から、すべての日付についても同様です。それがどうして起こっているのだろうか?

ありがとうございます!

+1

エラーあなたのコードには比較がありません。あなたは基本的に 'if($ some_date_string){何か}'と言っています。 – dqhendricks

答えて

1

文字列形式の日付を返します(たとえば、2000-01-01)。ブール値に変換された日付はtrueです。

代わりに、これをチェック:

if (time() > strtotime("+20 days", $date_string)) // Returns true if $date_string was in the last 20 days, or is in the future 

を明らかに、あなただけの20日以上古い日付をしたい場合は、ちょうどあなたが日付の間のいずれかの比較を行っていない<

3

から>を反転。代わりに、2番目のパラメータとして指定された日付をstrtotime()に有効な日付に変換できたかどうかをテストしています。その結果は常に真です。なぜなら、すべての日付が将来有効な日付を20日持っているからです。

つまり、date()がtrue値を返す場合、条件はTRUEです。 2番目のパラメータ(たとえば、2月42日)で無効なタイムスタンプを渡さない限り、真理値は常に返されます

date()コールの出力を別の日付文字列と比較するには、あなたの内部に追加のオペランドがありますif()

if ('2011-09-02' == date('Y-m-d', strtotime("+20 days", $date_string))) { 

} 
関連する問題