2017-09-19 11 views
1

私は2つの日付の違いを見つけたいと思いますが、私はdate_diffを同じものに使っています。フォーマット機能がdate_diffオブジェクトに適用されている場合、エラーを返します。ブールbooleanでメンバー関数format()を呼び出す

$field_value上のメンバ関数形式に

()の呼び出しは、データベースからフェッチされ、それはフォーマットがdd/mm/YYYYあるです。 $field_value$indexing_valueの値をハードコードすると、次のコードが機能します。

すべては私が

$diff->format("%R%a") 

の値を出力しようとしている行番号8まで細かい動作しており、それが正確な値を返しているが、コードはif文の近くにエラーが発生します。

$date = new DateTime(); 
$current_date = $date->format('d/m/Y'); 
$indexing_value = str_replace("/", "-", $field_value); 
$current_value = str_replace("/", "-", $current_date); 
$indexing_value = date_create($indexing_value); 
$current_value = date_create($current_value); 

$diff = date_diff($indexing_value, $current_value); 
if ($diff->format("%R%a") < 0) { 
    echo "1"; 
} else { 
    echo "2"; 
} 

上記のコードが間違っていることをお知らせください。

答えて

1

diffがあるかどうかをチェックする条件を追加します。エラーがある場合はfalseを返します。いくつかの値について差分が計算されていないと$diff

0

に値Falseを持っているので、あなたがエラーを取得している同じ

$diff = date_diff($indexing_value, $current_value); 
if ($diff) { 
    if ($diff->format("%R%a") < 0) { 
     echo "1"; 
    }else{ 
     echo "2"; 
    } 
} 

ためmanualを確認してください、私は上記のコードと間違っているものを教えてください。

コードにはいくつかの問題があります。

  1. あなたはdate_create()によって返された値をチェックしません。 FALSE on errorを返します。

  2. フォーマットのポイント$date結果の文字列から$current_valueを作成しますか?時間コンポーネントを気にせず、DateTimeオブジェクトの日付部分のみを使用する必要がある場合は、setTime()メソッドを使用して時刻コンポーネントを0に設定できます。

  3. str_replace()を使用して、その形式を知っている日付のテキスト表現を操作するポイントは何ですか? DateTime::createFromFormat()を使用して、文字列をDateTimeオブジェクトに解析することができます。

  4. 2つの日付の差とフォーマットを計算し、値を0と比較する必要はありません。 DateTimeオブジェクトは直接比較することができます。

すべてのすべては、あなたが必要とするすべてのコードは次のとおりです。

// Current date & time 
$today = new DateTime(); 
// Ignore the time (change $today to "today at midnight") 
$today->setTime(0, 0, 0); 

// Parse the value retrieved from the database 
$field = DateTime::createFromFormat('d/m/Y', $field_value); 
// We don't care about the time components of $field either (because the time 
// is not provided in the input string it is created using the current time) 
$field->setTime(0, 0, 0); 

// Directly compare the DateTime objects to see which date is before the other 
if ($field < $today) { 
    echo "1"; 
} else { 
    echo "2"; 
} 
関連する問題