2017-03-29 5 views
0

Ich habe ein Problem mit PHP 'diff()' oder '' zwischen zwei meiner Daten. Wenn ich irgendetwas starte, das Daten zu vergleichen versucht oder etwas als Datum zu definieren versucht, wird die Seite an diesem Punkt nicht mehr geladen.diff() und date_diff() in PHP funktioniert aus irgendeinem Grund nicht

<?php 

    // My starting point is the $dirty_date variable. 
    // It is collected from a string, parsed, 
    // and ends up being an integer-based date/seconds past Unix Epoch 

    //I am also including some echos along the way for debugging purposes. 

    echo "Check 1: ".$dirty_date."<br>"; 

    $systemdate = date("U"); 
    echo "Check 2: ".$systemdate."<br>"; 

    //$interval = $dirty_date->diff($systemdate); 
    echo "check 3: ".$interval; 

Hier sind die Ergebnisse:

Check 1: 1490781836

Check 2: 1490806703

Check 3:

Check 3 zurück nichts, weil ich die Linie, die Differentiale haben es hat auskommentiert. Ich habe es auskommentiert, denn wenn es aktiviert ist, lädt die Seite nichts anderes als diesen Punkt.

+3

'->' wird für Objekte verwendet. 'error_reporting (E_ALL); ini_set ('display_errors', '1'); ' – AbraCadaver

+3

sieht aus wie Ihr $ dirty_date ist nur eine ganze Zahl. Sie benötigen ein \ DateTime-Objekt. $ dirty_date = \ DateTime :: setTimestamp ($ dirty_date) –

+0

http://php.net/manual/en/datetime.diff.php ist ein guter Anfang – MonkeyZeus

Antwort

0

Hier ist ein Beispiel

$dirty_date = new \DateTime(); 
    $dirty_date->setTimestamp("your integer date"); 
    echo "Check 1: ".$dirty_date->format(\DateTime::ISO8601)."<br>"; 


    $systemdate = new \DateTime(); 
    echo "Check 2: ".$systemdate->format(\DateTime::ISO8601)."<br>"; 

    $interval = $dirty_date->diff($systemdate); 
    echo "check 3: ".$interval->format("%R%a days"); 

Link zu DateInterval ($ Intervall var) -Formate http://php.net/manual/en/dateinterval.format.php

+0

Mit einigen Modifikationen funktioniert das! Mein ganzzahliges Datum ist $ dirty_date. Also habe ich $ dirty_date mit "your integer date" vertauscht und alle deine $ dirty_date-Variablen in etwas anderes umbenannt. Ich habe nicht mit Daten im Format gearbeitet, also muss ich hier genauer untersuchen, was Sie hier gemacht haben. Mein nächster Schritt ist, dass ich die Termine um 4 Stunden anpassen muss, aber ich glaube, ich sollte das herausfinden können. Vielen Dank für Ihre Hilfe! – Mike

+0

Wenn meine Antwort Ihnen geholfen hat, akzeptieren Sie es bitte. Danke –

1

Zuerst wird $newdate nicht definiert. Zweitens muss $dirty_date ein DateTime-Objekt sein, derzeit ist es nur eine Ganzzahl. Ich werde annehmen, dass Sie diese vergleichen wollen $dirty_date und $systemdate

Versuchen:

$dirty_date_obj = new DateTime(); 
$dirty_date_obj->setTimestamp((int) $dirty_date); 

$system_date_obj = new DateTime(); 
$system_date_obj->setTimestamp((int) $systemdate); 


echo "interval between dirty and system: ".$dirty_date_obj->diff($system_date_obj)->format('%a Days and %h hours'); 

Auch dies bitte am Anfang des Codes geben Sie die Fehlermeldungen zu sehen, so dass es nicht nur eine leere Seite, wenn einige ist Fehler passiert:

error_reporting(E_ALL); ini_set('display_errors', '1'); 
+0

@Murila Danke.Das ist ein ganz anderer Weg als ich es versucht habe. Ich musste studieren, was du dort getan hast. Dies wird ausgeführt und es wird zurückgegeben: Intervall zwischen Dirty und System: 17254 Tage und 10 Stunden. Das Problem ist, ich habe vielleicht ein paar Stunden Unterschied zwischen diesen beiden Datetime erwartet. Ist bei der Konvertierung von Ganzzahlen in Datumsangaben etwas Seltsames passiert? – Mike

+0

@Mike Ich habe die Antwort bearbeitet. Ich habe eine neue Zeile im $ system_date_obj hinzugefügt, bitte versuchen Sie es. Ich habe es mit den ganzen Zahlen getestet, die Sie bei Check1 und Check2 angegeben haben, und habe 0 Tage und 6 Stunden bekommen. Ist das ein Ergebnis, das Sie erwarten würden? – Murilo

+0

Ja, 6 Stunden scheint richtig zu sein. Ich begann damit zu arbeiten. Ich habe einige Änderungen an Variablennamen vorgenommen, und da meine Systemzeit (aus einem bestimmten Grund) verrückt ist, musste ich die Systemzeit um -4 Stunden anpassen. Hier ist mein Code, der das macht. Es läuft. Die Anfangs- und Endzeiten sind coorect, aber wenn es das andere tut, sagt es 45 Minuten, wenn es wirklich ungefähr 360 Minuten sein sollte. – Mike

Verwandte Themen