2016-08-03 18 views
-2

Ziel ist es, zwei Daten zu vergleichen.DateTime zwei Daten vergleichen

Ich habe ein DateTime-Objekt in meiner Db-Tabelle unter Timestamp-Spalte gespeichert. Ich verwende Doctrine, um das Datum abzurufen. Sobald das Datum aus meiner Datenbank abgerufen wurde, sah es folgendermaßen aus: 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" 
    } 
    } 
} 

das abgerufene Objekt wurde nun zu einer $result Variablen zugewiesen ich diese $result[0][timestamp] tat, um das DateTime Objekt zu erhalten.

die aktuellen Daten abzurufen ich diese $date1 = $result->format('Y-m-d H:i:s'); diesen So, jetzt

documentation nach tat, dass ich das Datum eine Zeile in meine db eingefügt wurde abgerufen haben muß ich ein anderes Datum als die aktuellen Uhrzeit an.

dh:

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

nach diff dieser documentation

dies mir diesen Fehler gibt:

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

Jede Idee, warum ich diese Fehlermeldung erhalten, sieht aus wie die Dinge tue das Recht Weg nach den Docks. Vielleicht gibt es einen anderen Weg, um zwei Daten OPP Weg zu diff.

UPDATE:

Ok, so ja, es ist wahr, wenn ich $date1 = $result->format('Y-m-d H:i:s'); sein nicht mehr ein Objekt sein ein stiring verwenden.

So, jetzt sieht mein Code wie folgt aus:

$ test = $ result-> diff (neue Datetime()); var_dump ($ test);

es gibt DateInterval Objekt aber was ich mache aus ihm heraus:

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) 

Was ich brauche, wenn Date1 diff Date2> als 30 Minuten ich einige Maßnahmen ergreifen wollen.

+0

'$ result-> diff ($ date2)' –

Antwort

2

Es ist, weil method format String zurückgibt, aber kein Objekt. Versuchen Sie zu verwenden:

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

$date1 ist jetzt eine Zeichenkette, die kein Format() -Methode hat.

Versuchen Sie stattdessen: -

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

Nachdem Sie $date1 = $result->format('Y-m-d H:i:s'); tun. $date1 ist kein DateTime Objekt mehr, sondern eine Stringdarstellung von Datum und Uhrzeit.

Daher überspringen Sie diese Zeile. Nicht formatieren und dann auf Unterschiede prüfen. Das wird Ihnen ein DateTimeInterval Objekt geben.

0

Für jeden, der nicht weiß, was diff() tut, vergleicht er zwei Daten und gibt die Differenz zurück - aber unwahrscheinlich, dass andere Subtraktionsmethoden, diff() nie einen negativen Wert zurückgibt. Es spielt keine Rolle, ob das erste Datum größer oder kleiner als das zweite Datum ist.

Wenn dies in diesem Fall keine Rolle spielt, besteht der nächste Schritt darin, auf die erforderlichen Werte im DateInterval-Objekt zuzugreifen.

$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 Wenn meine Antwort Ihre Frage genügt, vergeben sie bitte auf den grünen Haken, so dass Ihre Frage aus der offenen Fragen Liste entfernt wird. Wenn noch etwas ungelöst ist, bitte erkläre es und ich werde versuchen zu helfen. – mickmackusa