Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich mit PHP Mysqli die Echtzeit eines Ereignisses in die Datenbank einfügen?

Anstatt mit Zeitzonen herumzuspielen, warum nicht einfach

ALTER TABLE `your_table`
  CHANGE `date_added` `date_added`
  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

Das wird sich ändern Ihre Spalte von einer DATE-Spalte in eine TIMESTAMP-Spalte , und konvertiert dabei alle Daten in ihre jeweiligen UTC-Zeitstempel.

Wenn eine neue Zeile eingefügt wird, wird der aktuelle Zeitstempel verwendet als Wert . Zeitstempel sind immer in UTC, sodass Sie weder die Zeitzone auf Ihrem MySql-Server ändern noch das Datum angeben müssen, wenn Sie eine neue Zeile einfügen.

Wenn Sie Ihre Spalten nicht ändern können oder wollen, können Sie den Zeitstempel auch einfach über

auswählen
SELECT UNIX_TIMESTAMP('date_added') FROM your_table;

Für Ihr TimeAgo können Sie dann einfach tun

$now = new DateTime;
$dateAdded = new DateTime("@$yourTimestampFromDb");
$dateAdded->setTimezone($now->getTimezone());
$timeSinceAdded = $dateAdded->diff($now);

Wenn Sie DateTime einen Zeitstempel zuweisen, wird immer UTC verwendet, unabhängig von Ihrer standardmäßigen Server-Zeitzone. Folglich müssen Sie entweder $dateAdded umwandeln in die Standardzeitzone (wie oben gezeigt) oder konvertieren Sie $timeSinceAdded nach UTC.

Um dateTime auf die Zeitzone des aktuell besuchenden Benutzers zu ändern, können Sie entweder

In jedem Fall ändern Sie dann einfach beide DateTimes in diese Zeitzone. Das geht ganz einfach über setTimezone() .

Der $timeSinceAdded wird dann ein DateInterval sein Objekt, das Sie so verwenden können

echo $timeSinceAdded->format('%a total days');

Bitte beachten Sie die Links für weitere Details, zum Beispiel zu den verfügbaren Formatmodifikatoren.