_"timestamp"
_という名前の列、タイプtimestamp
、属性_on update CURRENT_TIMESTAMP
_、デフォルトは_CURRENT_TIMESTAMP
_のMySQLDBテーブルがあります。
タイムスタンプではなく他の値を指定してレコードをテーブルに追加すると、タイムスタンプは_2016-12-28 17:02:26
_のように自動的に追加されます。
In PHP次のクエリを使用してテーブルをクエリします
_SELECT * FROM history WHERE user_id = 9 ORDER BY timestamp ASC
_
クエリの結果は_$rows
_に保存され、foreach
を使用して、他のいくつかの値がフォーマットされた配列を作成します。タイムスタンプを英国タイプの24時間日時にフォーマットしようとしています:_dd/mm/yy, HH:MM:SS
_。
date()
関数とstrftime()
関数の両方を次のように試しました。
_$formatted_datetime = strftime("%d %m %y %H %M %S", $row["timestamp"]);
$formatted_datetime = date("d/m/y, H:i:s", $row["timestamp"]);
_
これらは両方とも、次の通知と_01 01 70 00 33 36
_のように誤って出力される日時になります。
注意:20行目の/home/ubuntu/workspace/pset7/public/history.phpで検出された整形式でない数値
私はPHPとMySQLを初めて使用しますが、これまでに見た他の質問やドキュメントでは、この変換の実行にうまく対処できていません。strftime()
がなぜ機能しないのかわかりません。動作しますか、これを適切に行う方法もありますか?
これを行うには、OO(そして最も柔軟な)方法でDateTime
クラスを使用し、静的createFromFormat
メソッドを使用して新しいDateTime
オブジェクトをインスタンス化します。 :
$new_datetime = DateTime::createFromFormat ( "Y-m-d H:i:s", $row["timestamp"] );
これで、$new_datetime
オブジェクトを使用して、オブジェクトのformat
メソッドを呼び出すことにより、任意の文字列表現を生成できます。
echo $new_datetime->format('d/m/y, H:i:s');
起動するには、DateTime
オブジェクトがあるので、任意の変換方法(タイムゾーンのシフトや日数の追加など)、比較(別のDateTime
より大きいまたは小さい)、およびさまざまな時間計算(これと別のDateTime
の間の日数/月数など)。
DateTime: http://php.net/manual/en/class.datetime.php 学ぶ。大好きです。それを生きる。
通常、MySQLの日付タイムスタンプでは時間をYYYY-MM-DD HH:MM:SS (2016-12-20 18:36:14)
formateとして保存し、date formateを使用して簡単に変換できますが、最初に入力を時刻に変換する必要があります。以下はトリックを行います
$formatted_datetime = date("d/m/y, H:i:s", strtotime($row["timestamp"]));
MySQLに仕事をさせてみませんか?そして、本当にdd/mm/yyではなくmm/dd/yyが必要ですか?
SELECT *, DATE_FORMAT(timestamp, '%m/%d/%y, %T') formatted_date FROM ....
次に、フォーマットされた日付を$ row ['formatted_date']として抽出できます。
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format を参照してください
Carbon class とその文字列フォーマットを使用します
$carbon = Carbon::instance('2016-12-28 17:02:26');
次に、好きなようにフォーマットできます。