4
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()について説明します。

4

4 に答える 4

7

PHPは32ビット整数を使用します。

32ビット整数は2,147,483,647に制限されています

3番目の例では、値がオーバーフローしています。車のKMカウンターのように考えてください。ある値(この場合は2,147,483,647)に制限されており、この値を渡すと0に戻ります。

これにより、2038年問題が発生する可能性があります(2000年バグを覚えていますか?同様の概念)。

「PHP開発者会議の議事録」では、 64ビット整数を追加する提案がありましたが、それがどこまで進んだのか、時間に関連する機能のポリシーの再評価についてはわかりません。

この助けを願っています:)

于 2012-06-28T15:15:42.813 に答える
1

あなたが見ているのはY2K38バグです。224089607732ビット整数には大きすぎてオーバーフローします。

于 2012-06-28T15:17:20.810 に答える
1

マニュアルから:

タイムスタンプの有効な範囲は、通常、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

于 2012-06-28T15:17:59.733 に答える
1

タイムスタンプの有効な範囲は、通常、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

于 2012-06-28T15:18:17.747 に答える