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?
Verwenden Sie dazu auf die OO (und die flexibelste) Weise die Klasse DateTime
und verwenden Sie die statische Methode createFromFormat
name__, um ein neues Objekt DateTime
zu 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 format
des Objekts aufrufen:
echo $new_datetime->format('d/m/y, H:i:s');
Zum Booten können Sie, da Sie ein DateTime
name__-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 DateTime
name__) und verschiedene Zeitberechnungen (wie viele Tage/Monate/etc ... zwischen diesem und einem anderen DateTime
name__).
DateTime: http://php.net/manual/en/class.datetime.php Lerne es. Liebe es. Lebe es.
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"]));
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
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.