SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【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億年先のお正月も大丈夫。すばらしい。

関連するメモ

コメント(1)

mare_f 2012年5月23日 14:58

ありがとう!
10億年後の正月にも雑煮残っているだろうか