【MySQL】「1965-05-15」のような日付をTIMESTAMPに変換すると0(ゼロ)が返される理由とは?
UNIX_TIMESTAMP関数で古い日付が0になる原因
MySQLのUNIX_TIMESTAMP関数を使用すると、指定した日付や日時(DateTime)から、Unixエポックからの経過秒数を取得することができます。しかし、「1965-05-15」のような日付を変換しようとすると、結果は0(ゼロ)となってしまいます。
その理由は、TIMESTAMP型の有効範囲が「1970-01-01 00:00:01」から「2038-01-19 08:44:07」までに限定されているためです。この範囲外の日付値は変換することができず、その場合、UNIX_TIMESTAMP関数は常に0を返します。
動作確認の例
実際の動作を、以下の例で確認してみましょう。
例1:TIMESTAMPの範囲より前の日付(1965年)
mysql> Select UNIX_TIMESTAMP('1965-05-15');
+----------------------------------------------+
| unix_timestamp('1965-05-15 05:04:30') |
+----------------------------------------------+
| 0 |
+----------------------------------------------+
1 row in set (0.00 sec)1965年は1970年以前の日付のため、TIMESTAMPの範囲外であり、結果として0が返されます。
例2:TIMESTAMPの範囲内の日付(1970年)
mysql> select UNIX_TIMESTAMP('1970-05-15 05:04:30');
+----------------------------------------------+
| unix_timestamp('1970-05-15 05:04:30') |
+----------------------------------------------+
| 11576070 |
+----------------------------------------------+
1 row in set (0.00 sec)一方、1970年5月15日はTIMESTAMPの有効範囲内であるため、正しく経過秒数11576070が返されます。
まとめ
UNIX_TIMESTAMP関数で0が返される場合は、対象の日付がTIMESTAMP型の有効範囲(1970-01-01 00:00:01〜2038-01-19 08:44:07)から外れていないかを確認しましょう。それより古い日付や新しい日付を扱いたい場合は、DATETIME型の使用や、別の方法での日付計算を検討する必要があります。
-
PHP・MySQLで日付形式をdd/mm/yyyyに変更する方法
PHPやMySQLでは、日付の表示形式を自由に変更できます。本記事では、日付を「dd/mm/yyyy(日/月/年)」形式に変換する方法を、PHPとMySQLそれぞれのケースについて解説します。PHPで日付形式を変更する方法PHPでは、date()関数を使って日付形式を簡単に変更できます。基本構文は以下の通りです。date(d/m/Y, 日時の変数);また、文字列を日付として扱う場合は、strtotime()関数を使用します。この関数は、日付を表す文字列をUnixタイムスタンプに変換してくれるため、date()関数と組み合わせて使うのが一般的です。以下は、日時を「dd/mm/yyyy」形式に整形
-
MySQLデータベースで2020-04-30ではなく30-04-2020形式の日付を表示する方法
MySQLで日付を「2020-04-30」ではなく「30-04-2020」のような形式で表示したい場合は、DATE_FORMAT()関数を使用します。構文は以下のとおりです。select date_format(yourColumnName,%d-%m-%Y) as anyAliasName from yourTableName;テーブルの作成例まず、サンプル用のテーブルを作成しましょう。mysql> create table demo80 -> ( -> due_date date -> );Query OK, 0 rows affected (0.