2016-03-29 9 views
0

Ich habe sehr seltsames Problem. Ich bekomme ein Objekt aus der Datenbank und dieses Objekt hat ein anderes Datum in der Anwendung - immer 10 Minuten. Ich verstehe überhaupt nicht, was hier passiert. Ich benutze Symfony2 und MySql (MariaDB). Im Folgenden Beispiel (18.50 und 18.40):Anderes Datum (Zeit) in db und Anwendung - 10 Minuten

enter image description here enter image description here

Wer eine Idee? Warum f ** 10 Minuten, Zeitzone macht in Stunden Unterschied. Ich bin total dumm. Danke für Hilfe.

Code:

$synch = $this->getDoctrine()->getManager()->getRepository('LizukKiteBundle:Synchronization')->createQueryBuilder('s') 
     ->orderBy('s.id', 'desc') 
     ->setMaxResults(1) 
     ->getQuery() 
     ->getResult() 
    ; 

    if ($synch) { 
     $synch = $synch[0]; 
    } else { 
     $synch = null; 
    } 
    dump($synch);die(); 

// EDIT:

Ich entdeckte, dass immer nur der letzte Datensatz mit falschem Datum Druck - aber warum? Ich habe keine Ahnung:/

Wenn ich mehr Objekt von db immer nur die letzte ist "gebrochen". Vielleicht hilft es jemandem?

enter image description here enter image description here

enter image description here enter image description here

Above wieder nur letzter Eintrag - ich denke, das Problem in Code ist .. aber es sieht ok.

EDIT ///

Ok, Problem wurde behoben. Ich vergesse, dass ich das letzte Objekt aus dieser Datenbanktabelle in meinem Listener auch in der onKernelRequest-Methode bekomme. Und da hatte ich grundlegende Fehler in 'Klon' Code :(

Ich hatte:

$maintenanceTime = clone $maintenanceTime; //cloning Synchronization object here 
$maintenanceTime = $maintenanceTime->getDate(); 
$maintenanceTime->modify('+5 minutes'); 

Lösung ist.

$maintenanceTime = clone $maintenanceTime->getDate(); //clonning DateTime object 
$maintenanceTime->modify('+5 minutes'); 

Dont mich fragen, warum das schwache Code erstellt wurde Thx für helfen und verschwenden Sie Ihre Zeit.

+1

Welche Zeitzonen haben Sie in: Server os, php, mysql? Muss gelesen werden: [Zeitzonen sind nicht durch Stunden unterschieden] (http://infiniteundo.com/post/25509354022/more- Lüge-Programmierer-glauben- Über-Zeit) – JimL

+0

Was ist mit den Datensätzen in der db? Sind die Daten korrekt gespeichert? – Aerendir

+0

Alles sieht gut aus .. Immer nur der letzte Datensatz ist kaputt. Ich denke, dass Code, der Datensätze von db bekommt, ein Problem verursacht. – LuckyLue

Antwort

0

Ok, Problem gelöst wurde. Ich vergesse, dass ich das letzte Objekt aus dieser Datenbanktabelle in meinem Listener auch in der onKernelRequest-Methode bekomme. Und da hatte ich grundlegende Fehler in 'Klon' Code :(

Ich hatte:

$maintenanceTime = clone $maintenanceTime; //cloning Synchronization object here 
$maintenanceTime = $maintenanceTime->getDate(); 
$maintenanceTime->modify('+5 minutes'); 

Lösung ist:

$maintenanceTime = clone $maintenanceTime->getDate(); //clonning DateTime object 
$maintenanceTime->modify('+5 minutes'); 

Dont mich fragen, warum das schwache Code erstellt wurde Thx für die Hilfe. und verschwenden Ihre Zeit.

0

Ah, ja, ich hatte das gleiche Problem, aber nicht in PHP noch Symfony2 aber mit Java. Es ist eher gen öderes Problem.

Das Problem für mich war, dass wir unsere App auf Java7 ausgeführt wurden, die nicht Mikrosekunden aber nur Millisekunden unterstützt. Es scheint, dass deine DB dich dazu verleitet, zu denken, dass sie den Wert 2015-03-29 18:40:18 enthält, aber es hat so etwas wie 2015-03-29 18:40:18.123456. Wenn Sie also versuchen, Ihre datetime Zeichenfolge in DateTime Objekt zu analysieren, addiert es die letzten 3 Ziffern zu den ersten 3 generierenden genug Zeitverschiebung, etwa 10 Minuten (in meinem Fall waren es 12 Minuten).

Also, ich denke, die Lösung wäre zu prüfen, wie Sie die DateTime DB Engine speichern. Ist es typisch datetime Art oder etwas anderes?

Hope this wirft ein Licht mit auf die Frage :)

Verwandte Themen