2017-08-26 1 views
0

Ich erstelle Benachrichtigungen System und hier ist eine Aufgabe: Holen Sie sich die Zeit, wenn eine Benachrichtigung gesendet wurde. Ich meine folgendes: vor 1 Minute, vor 13 Stunden und so weiter. Ich habe schon ein Skript erfunden, aber es zeigt die falsche Zeit an. Zum Beispiel anstatt "vor 5 Minuten" zeigt es "9 Stunden". Hier ist der Algorithmus:Falsche Zeit mit DateTime

  1. Get alten Zeitstempel aus der Datenbank. Alter Zeitstempel ist die Uhrzeit, zu der eine Benachrichtigung gesendet wurde.
  2. Aktuellen Benutzer Zeitstempel erhalten.
  3. Get Unterschied zwischen ihnen.
  4. Echo-Ergebnis. Hier

ist der PHP-Code:

$fromdb = '1503737539'; //For this example think, that this variable is from database. 
//This timestamp was created 5 minutes earlier, so in result it should show '5 minutes ago'. 

    $curr = new DateTime(); 
    $got2 = new DateTime(date('Y-m-d H:i:s',$fromdb)); 
    $interval = $curr->diff($got2); 
    echo $interval->format('%d')." days ".$interval->format('%h')." Hours ".$interval->format('%i')." Minutes ".$interval->format('%s')." Seconds"; 

Die Ausgabe lautet:

0 Tage 9 Stunden ....

statt

0 Tage 0 Stunden 5 Minuten ....

Wie kann ich das beheben? Ich denke, das ist ein Problem mit Zeitzonen. Aber wie kann ich die Zeitzone der Gäste erraten?

Aktualisierung: Änderungscode: $ got2 = neue DateTime (Datum ('Y-m-d H: i: s', $ fromdb));

Und interessante Tatsache: Je mehr ist der tatsächliche Unterschied, desto weniger Zeit zeigt es in der Ausgabe. Beispiel: Der alte Zeitstempel wurde um 8:00 Uhr erstellt und der aktuelle Wert ist 15:00 Uhr. Er zeigt 0 Tage 1 Stunde in der Ausgabe an.

+0

Es ist ein Fehler in Ihrem Code.Sie formatieren Datum ohne Stunden, Minuten und Sekunden $ got2 = neue DateTime (Datum ('Y-m-d', $ fromdb)); versuchen $ got2 = neue DateTime (Datum ('Y-m-d H: i: s', $ fromdb)); – Dmitry

+0

@Dmitry also, was ist ein richtiger Weg? – AndrewGG

Antwort

2

Ich denke

date('Y-m-d',$fromdb) 

Code brach. Versuchen Sie

$got2->setTimestamp($fromdb) 
+0

Die Funktion setTimestamp() hat ein Problem behoben. Auch das Ändern des Formats hat geholfen. Danke an alle :) – AndrewGG

1

gibt es einen Fehler in Ihrem Code. Sie Format Datum ohne Stunden, Minuten und Sekunden

$got2 = new DateTime(date('Y-m-d',$fromdb)); 

versuchen

$got2 = new DateTime(date('Y-m-d H:i:s',$fromdb)); 
+0

Diese Zeit wurde auf 2 Stunden verkürzt. Aber es sollte 45 Minuten dauern. – AndrewGG

+0

Es ist weil Ihr Zeitstempel 1503737539 vor 4 Stunden war. $ fromdb = '1503737539'; $ curtime = Zeit(); echo ($ curtime - $ fromdb)/60/60. PHP_EOL; – Dmitry

+0

Thnaks, Formatwechsel half viel :) – AndrewGG

1

Versuchen

$ date = new Datetime(); Echo $ Datum-> Format ('U = Y-m-d H: i: s');

$ date-> setTimestamp (1171502725); Echo $ Datum-> Format ('U = Y-m-d H: i: s');