date("Y",1340896077)//1340896077 are the seconds till 2012 from 1970
正常な2012年を与える
And date("Y",1940896077)
これも正常な2031を与えます
だが date("Y",2240896077)
は1904を与えていますが、これはまったく正常ではありません。むしろ2041を与える必要があります。
ここで、phpのtime()とdate()について説明します。
PHPは32ビット整数を使用します。
32ビット整数は2,147,483,647に制限されています
3番目の例では、値がオーバーフローしています。車のKMカウンターのように考えてください。ある値(この場合は2,147,483,647)に制限されており、この値を渡すと0に戻ります。
これにより、2038年問題が発生する可能性があります(2000年バグを覚えていますか?同様の概念)。
「PHP開発者会議の議事録」では、 64ビット整数を追加する提案がありましたが、それがどこまで進んだのか、時間に関連する機能のポリシーの再評価についてはわかりません。
この助けを願っています:)
あなたが見ているのはY2K38バグです。2240896077
32ビット整数には大きすぎてオーバーフローします。
マニュアルから:
タイムスタンプの有効な範囲は、通常、1901年12月13日金曜日20:45:54GMTから2038年1月19日火曜日03:14:07GMTまでです。(これらは、32ビットの符号付き整数の最小値と最大値に対応する日付です)。ただし、PHP 5.1.0より前では、この範囲は一部のシステム(Windowsなど)では01-01-1970から19-01-2038に制限されていました。
タイムスタンプの有効な範囲は、通常、1901年12月13日金曜日20:45:54GMTから2038年1月19日火曜日03:14:07GMTまでです。(これらは、32ビットの符号付き整数の最小値と最大値に対応する日付です)。ただし、PHP 5.1.0より前では、この範囲は一部のシステム(Windowsなど)では01-01-1970から19-01-2038に制限されていました。
差出人:http : //php.net/manual/en/function.date.php