Unix timestampの罠。

こんにちはー。ららべるだう!

大丈夫かコレ。。

まぁいいや。

 

今回はUnix Timestampでハマったので、Unix Timestampでハマっているあなたと、ハマってしまった私に対して書いていこうかと思います。笑

 

問題

外部APIからUnix TimestampがINTで取得できる。

PHPのdate()で変換。

MySQLのDATETIME型のカラムにINSERT

ReferenceError => Loop

 

なにがおこってるの。。

 

PHP date 仕様

date

(PHP 4, PHP 5, PHP 7)

date — ローカルの日付/時刻を書式化する

説明 ¶

string date ( string $format [, int $timestamp = time() ] )

指定された引数 timestamp を、与えられた フォーマット文字列によりフォーマットし、日付文字列を返します。 タイムスタンプが与えられない場合は、現在の時刻が使われます。 つまり timestamp はオプションであり そのデフォルト値は time() の値です。

http://php.net/manual/ja/function.date.php

これを見る限り

使い方は簡単だけど何故かうまくいかない。。

 

原因・解決

Unix Timestampには2種類ある。

2017年12月1日だとこうなる。

10桁 1512086400

13桁 1512086400000

 

。。

 

実はこれms秒を加味していない(10桁)と加味している(13桁)と同じUnixTimestampって名前になってるみたいです。

そして私が扱ってたのが13桁の方で

いつだよこれ!!!と怒られてたみたいです。。笑

 

余談

MySQL DATETIME型 ‘9999-12-31 23:59:59.999999’まで

MySQL TIMESTAMP型 ‘2038-01-19 03:14:07.999999’まで

 

ここまで読んでいただけたらわかると思いますが、解決法は1000で割ってあげると大丈夫という簡単なものでした。

 

 

こんかいはここまで!!!

 

参考リンク

MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.3 日付と時間型

date — ローカルの日付/時刻を書式化する

microtime — 現在の Unix タイムスタンプをマイクロ秒まで返す

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です