it-swarm.com.de

So konvertieren Sie MySQL TIMESTAMP in Datum und Uhrzeit PHP

Ich habe eine MySQL-DB-Tabelle mit einer Spalte namens "timestamp", einem Typ von timestamp und einem Attribut von on update CURRENT_TIMESTAMP sowie einem Standardwert von CURRENT_TIMESTAMP.

Wenn ich der Tabelle einen Datensatz hinzufüge, der andere Werte, aber nicht den Zeitstempel angibt, wird der Zeitstempel automatisch wie 2016-12-28 17:02:26 hinzugefügt.

In PHP frage ich die Tabelle mit der folgenden Abfrage ab

SELECT * FROM history WHERE user_id = 9 ORDER BY timestamp ASC

Das Ergebnis der Abfrage wird in $rows gespeichert, und ich verwende eine foreach, um ein Array mit einigen der anderen formatierten Werte zu erstellen. Ich versuche, den Zeitstempel auf die 24-Stunden-Datumszeit in Großbritannien zu formatieren: dd/mm/yy, HH:MM:SS.

Ich habe die Funktionen date() und strftime() wie folgt ausprobiert:

$formatted_datetime = strftime("%d %m %y  %H %M %S", $row["timestamp"]); 
$formatted_datetime = date("d/m/y, H:i:s", $row["timestamp"]);

Beides führt dazu, dass der folgende Hinweis und die Datums- und Uhrzeitangabe wie bei 01 01 70 00 33 36 falsch ausgegeben werden:

Hinweis: Ein nicht gut geformter numerischer Wert, der in /home/ubuntu/workspace/pset7/public/history.php in Zeile 20 gefunden wird

Ich bin neu in PHP und MySQL und bisher haben sich noch keine der anderen Fragen oder Unterlagen, die ich gesehen habe, erfolgreich mit der Durchführung dieser Konvertierung befasst. Ich verstehe nicht, warum strftime() nicht funktioniert oder wie dies richtig gemacht wird?

5
Toby

Verwenden Sie dazu auf die OO (und die flexibelste) Weise die Klasse DateTimeund verwenden Sie die statische Methode createFromFormatname__, um ein neues Objekt DateTimezu instanziieren:

$new_datetime = DateTime::createFromFormat ( "Y-m-d H:i:s", $row["timestamp"] );

Jetzt können Sie mit dem Objekt $new_datetime eine beliebige Zeichenfolgendarstellung generieren, indem Sie die Methode formatdes Objekts aufrufen:

echo $new_datetime->format('d/m/y, H:i:s');

Zum Booten können Sie, da Sie ein DateTimename__-Objekt haben, jetzt auch jede Art von Transformation durchführen (z. B. Zeitzonen verschieben oder Tage hinzufügen), vergleichen (größer oder kleiner als ein anderes DateTimename__) und verschiedene Zeitberechnungen (wie viele Tage/Monate/etc ... zwischen diesem und einem anderen DateTimename__).

DateTime: http://php.net/manual/en/class.datetime.php Lerne es. Liebe es. Lebe es.

6
Ray

Normalerweise können Sie in MySQL-Datums-Zeitstempel Zeit als YYYY-MM-DD HH:MM:SS (2016-12-20 18:36:14)-Format speichern. Sie können sie einfach mit Datumsformat nach Ihren Wünschen konvertieren, müssen aber zuerst Ihre Eingabe in Zeit konvertieren. Folgendes wird den Trick machen

$formatted_datetime = date("d/m/y, H:i:s", strtotime($row["timestamp"]));
2
reza

Warum nicht MySQL die Arbeit machen lassen? Und wollen Sie wirklich MM/TT/JJ, nicht TT/MM/JJ?

SELECT *, DATE_FORMAT(timestamp, '%m/%d/%y, %T') formatted_date FROM ....

Dann können Sie das formatierte Datum als $ row ['formatted_date'] extrahieren.

Siehe https://dev.mysql.com/doc/refman/5.5/de/date-and-time-functions.html#function_date-format

1
Giles B

Ich würde die Klasse Carbon und deren String-Formatierung verwenden

$carbon = Carbon::instance('2016-12-28 17:02:26');

Dann können Sie es wie gewünscht formatieren.

0
Samuel