質問

私は、PHPがミリ秒を使用して日付を表す性質上、2038年を過ぎて日付を表すことはできません。将来日付をはるかに計算したいという問題があります。何千年も離れています。

明らかに、PHP日付関数を使用してこの日付を表すことはできませんが、制限のために、私の側に何かがあります...私がやりたいのは、年、月、日を保存することだけです。私は時間、分、秒、ミリ秒を気にしません。

この追加情報を含めることなく、多くの情報を廃棄することをいとわないので、将来をさらに計算できるはずだと考えるのは正しいですか?これは現在これを行っているライブラリですか?そうでない場合は、この問題にアプローチする方法について何かアドバイスがありますか?

役に立ちましたか?

解決

代わりに使用することもできます DateTime クラスは、時間コンポーネントを独立して内部的に表します。したがって、2038の制限の影響を受けません(:: getTimestampを使用しない限り)。

他のヒント

君は できる 64ビットプラットフォームを使用します。

整数のサイズはプラットフォームに依存しますが、約20億の最大値は通常の値です(32ビットの署名)。 64ビットプラットフォームの最大値は約9e18です。

ソース.

プラットフォームが64ビットであることを確認してください var_dump(PHP_INT_SIZE === 8). 。もしも TRUE, 、システムは64ビットです。

PHPが導入されました 日付時刻() この問題を解決するためのバージョン5.2のクラス。しかし、あなたはまだ64ビットOSにある必要があります。

Windowsを忘れてください! Windows 64ビットでApache 64ビットを実行していても!

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns bool false using WAMP 64-Bit over Windows 64 Bit

タイムスタンプを計算する必要がある場合は、64ビットシステム(Windowsではなく)を使用します。

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns int 17000496000 using a LAMP Server

WindowsのVMwareを使用してLAMPサーバーを実行でき、最終ホストサーバーもこの64ビットサービスを使用する可能性が高いです。

言い換えると:

if (intval("9223372036854775807")==9223372036854775807) {
  // 64-bit
} else {
  // 32-bit
}

とった ?

注:2038年以降、Time()とgetTimestamp()は64ビット環境(Linux)ではOKです。

PHPでは、2038を超える日付をネイティブに処理できないことがわかります。ただし、次のようなライブラリがあります これです これは、浮動ポイントが64ビットであるという事実を利用して、必要に応じてこの問題をバイパスすることができます。 (32ビットシステムを使用しているという仮定の下で... 64ビットを使用している場合は大丈夫です)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top