【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億年先のお正月も大丈夫。すばらしい。
mare_f 2012年5月23日 14:58
ありがとう!
10億年後の正月にも雑煮残っているだろうか