web-dev-qa-db-ja.com

MySQLTIMESTAMPをPHP

_"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()がなぜ機能しないのかわかりません。動作しますか、これを適切に行う方法もありますか?

6
Toby

これを行うには、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 学ぶ。大好きです。それを生きる。

8
Ray

通常、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"]));
2
reza

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 を参照してください

1
Giles B

Carbon class とその文字列フォーマットを使用します

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

次に、好きなようにフォーマットできます。

0
Samuel