MySQL データベースでの日付と時刻の選択について混乱しています。基本を教えて選択肢をまとめたチートシートはありますか?
技術的な修正は歓迎しますが、これは参照を意図したものではないことに注意してください。まとめチートシートです。
DATE
サポート範囲は「1000-01-01」から「9999-12-31」です。
YYY-MM-DD 形式の文字列として格納されます。
DATETIME
'1000-01-01 00:00:00' から '9999-12-31 23:59:59' までの範囲をサポートします。
YYYY-MM-DD HH:MM:SS 形式の文字列として格納されます。
カレンダーでは日付、壁掛け時計では時間を表します。レコードが作成または更新されたときに変更されることはありません。サーバーのタイムゾーンに基づいて変更されることはありません。1000 年から 9999 年までの日付を実行できます。
TIMESTAMP
'1970-01-01 00:00:01' UTC から '2038-01-19 03:14:07' UTC までの範囲をサポートします。1970
年より前の日付は使用できないため、誕生日には使用できません。
YYYY-MM-DD HH:MM:SS 形式の文字列として格納されます。
タイムスタンプは、明確な時点です。MySQL では、通常、レコードの変更を追跡するために使用され、レコードが作成および/または更新されたときに自動的に更新されるように設定できます。
MySQL は、サーバーのタイムゾーンに基づいて TIMESTAMP 値を変換します。保存のために UTC (協定世界時) に変換され、取得のためにサーバーのタイム ゾーンに戻されます。
UNIX TIMESTAMP
1970 年 1 月 1 日以降の UTC 調整秒数。符号付き 32 ビット整数として格納されます。
うるう秒が発生すると、UTC の 1 日の長さが正確に 86400 秒にならなくなり、Unix 時刻番号に不連続が生じます。
これらは MySQL の「整数」列に格納され、内部的に 32 ビットとして格納されます。
MySQL DATE FUNCTIONS
MySQL の日付と時刻の形式は文字列であり、整数ではありません。
FROM_UNIXTIME(timestamp) は UNIX タイムスタンプを文字列としてフォーマットします
UNIX_TIMESTAMP(mysqldate) は MySQL 文字列を UNIX タイムスタンプに変換します
PHP
の日付関数 PHP の日付関数は、UNIX のタイムスタンプ、つまり整数で動作します。
string date( string $format, int $timestamp) は UNIX タイムスタンプから MySQL 文字列を返します
int strtotime( string $mysqldate) は MySQL 文字列から UNIX タイムスタンプを返します
互換性のない日時形式に対処する方法:
PHP は unix タイムスタンプを MySQL 文字列に変換します。
$mysqldate = date( 'Y-m-d H:i:s', $timestamp );
PHP は MySQL 文字列を UNIX タイムスタンプに変換します。
$timestamp = strtotime( $mysqldate );
MySQL は UNIX タイムスタンプを MySQL 文字列に変換します。
$query = "UPDATE table SET mysqldatetimefield = FROM_UNIXTIME($timestamp);
MySQL は MySQL 文字列を UNIX タイムスタンプに変換します。
$query = "SELECT UNIX_TIMESTAMP(mysqldate) FROM table;
Unix タイムスタンプを MySQL 整数列に保存します。
mysql> CREATE TABLE table ( timestamp INTEGER, PRIMARY KEY (timestamp) );
mysql> INSERT INTO table(timestamp) VALUES (1358402400)