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
- Get alten Zeitstempel aus der Datenbank. Alter Zeitstempel ist die Uhrzeit, zu der eine Benachrichtigung gesendet wurde.
- Aktuellen Benutzer Zeitstempel erhalten.
- Get Unterschied zwischen ihnen.
- 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.
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
@Dmitry also, was ist ein richtiger Weg? – AndrewGG