【php】タイムスタンプは2038年まで?64bit環境でも?
問題
タイムスタンプは 2038-01-19 03:14:07(1970年1月1日0時0分0秒 から 2,147,483,647秒) までの日付しか表せないですか?
64bit環境なら、もっと大きなタイムスタンプも扱えるんじゃないですか?
実験結果
64bit版OSで、64bit版環境用に(--with-libdir=lib64 で)コンパイルしたphp5を使って試してみた。
#まず普通に
$ php -r "var_dump(strtotime('2037-12-23'));"
int(2145106800)
#32bitを超えた!
$ php -r "var_dump(strtotime('2123-12-23'));"
int(4858930800)
$ php -r "var_dump(strtotime('9876-12-23'));"
int(249520057200)
#strtotimeは5桁の年はうまく認識しないみたい
$ php -r "var_dump(strtotime('12345-12-23'));"
int(1135308840)
#ではdate関数に大きなタイムスタンプを渡したら? → 大丈夫でした
$ php -r "var_dump(date('Y-m-d',249520057200));"
string(10) "9876-12-23"
#8万年後も
$ php -r "var_dump(date('Y-m-d',2495200572000));"
string(11) "81039-10-05"
//80万年後も、人類は安泰です
$ php -r "var_dump(date('Y-m-d',24952005720000));"
string(12) "792667-08-02"
世界のコンピューターが64ビット環境になれば、およそ西暦3000億年まで安心です。
追記
「mktime()は?」とのことなので、試す。
$ php -r "var_dump(mktime(0,0,0,1,1,1000000000));" int(31556889832748400)
約10億年先のお正月も大丈夫。すばらしい。
ありがとう!
10億年後の正月にも雑煮残っているだろうか