2016-08-03 6 views
-2

2つの日付を比較することが目的です。DateTime 2つの日付を比較する

timestampカラムの下にあるdbテーブルにDateTimeオブジェクトが格納されています。私はDoctrineを使って日付を取得します。一度データベースから日付を取得すると、このように見えます。var_dump;

array(1) { 
    [0]=> 
    array(1) { 
    ["timestamp"]=> 
    object(DateTime)#321 (3) { 
     ["date"]=> 
     string(26) "2016-08-03 11:03:36.000000" 
     ["timezone_type"]=> 
     int(3) 
     ["timezone"]=> 
     string(13) "Europe/London" 
    } 
    } 
} 

取得したオブジェクトは、今、私はこの$result[0][timestamp]やったDateTimeオブジェクトを取得する$result変数に割り当てられていました。

私はこの$date1 = $result->format('Y-m-d H:i:s');このdocumentation

に応じだから今、私は行が私のデシベルに挿入された日付を取得したことを、私は現在の時点での別の日付を必要としなかった実際のデータを取得します。

すなわち:

$date1 = $result->format('Y-m-d H:i:s'); 
$date2 = new DateTime(); 
$test = $date1->diff($date2); 

デフこのdocumentation

によると、これは私にこのエラーを与える:

Error: Call to a member function diff() on a non-object 

私はこのエラーメッセージは、物事に権利をやっているように見える取得なぜすべてのアイデアをドックに沿って。多分2つの日付をOPPの方法で比較する別の方法があります。

UPDATE:私は$date1 = $result->format('Y-m-d H:i:s');そのもはやオブジェクトのstiringを使用しない場合は

[OK]をので、はい、それは本当です。

だから今私のコードは次のようになります。

$テスト= $ result->デフ(新しい日時()); var_dump($ test);

それはDateIntervalオブジェクトを返しますが、私はそれから何を作るのです。

object(DateInterval)#317 (15) { 
    ["y"]=> 
    int(0) 
    ["m"]=> 
    int(0) 
    ["d"]=> 
    int(0) 
    ["h"]=> 
    int(1) 
    ["i"]=> 
    int(27) 
    ["s"]=> 
    int(5) 
    ["weekday"]=> 
    int(0) 
    ["weekday_behavior"]=> 
    int(0) 
    ["first_last_day_of"]=> 
    int(0) 
    ["invert"]=> 
    int(0) 
    ["days"]=> 
    int(0) 
    ["special_type"]=> 
    int(0) 
    ["special_amount"]=> 
    int(0) 

日付2に日付1の差分がある場合、私は必要なもの>私はいくつかのアクションを実行したい30分より。

+0

'$ result->デフ($の日付2)'私の答えはあなたの質問を満たしている場合は、あなたの質問に未回答の質問リストから削除されるように –

答えて

2

method formatは文字列を返しますがオブジェクトではないためです。使用してみてください:

$test = $result->diff(new DateTime()); 
2
$date1 = $result->format('Y-m-d H:i:s'); 

$date1は現在の形式()メソッドを持っていない文字列です。

代わりにこれを試してください: -

$date1 = $result->format('Y-m-d H:i:s'); 
$date2 = new DateTime(); 
$test = $result->diff($date2); 
0

あなたが$date1 = $result->format('Y-m-d H:i:s');を実行した後。 $date1は、もはやDateTimeオブジェクトではなく、日時の文字列表現です。

この行をスキップしてください。書式を設定しないで、違いを確認してください。それはあなたにDateTimeIntervalオブジェクトを与えるでしょう。

0

diff()が何をしているのかわからない人は、2つの日付を比較してその差を返しますが、他の減算方法ではありませんが、diff()は負の値を返しません。最初の日付が2番目の日付よりも大きいか小さいかは関係ありません。

これで問題にならない場合、次のステップは、DateIntervalオブジェクトの必要な値にアクセスすることです。

$diff=(array)$date1->diff($date2);  // calculate the difference and cast as an array 
$labels=array("y"=>"year","m"=>"month","d"=>"day","h"=>"hour","i"=>"minute"); 
// filter the $diff array to only include the desired elements and loop 
foreach(array_intersect_key($diff,$labels) as $k=>$v){ 
    if(($k!="i" && $v>0) || $v>30){ 
     // $labels[$k] = $v > 30 minutes, take some action 
    } 
} 
+0

@Tomaziが、それに緑色のチェックマークを授与してください。まだ解決されていないものがある場合は、説明してください。私は助けようとします。 – mickmackusa

関連する問題