これは一種のばかげた質問ですが、time()
の最大INT値は何であり、それは将来の日付です。
2999年1月1日
Time()がその値に達することはありますか?大きなtime()
値を取得すると、次のようになります。
1970年1月1日木曜日1:00 AM
通常のint日付
1287320788-今日の日付を出力:2010年10月17日日曜日2:06 PM
しかし、私は最大のint日付と最後の日付だけに興味があります。
最後の32ビット整数のタイムスタンプは2038年1月19日に到達します。これは 2038年問題 として知られています。
PHPは、表現できる最大の整数をPHP_INT_MAX
定数に格納します。
date('Y-m-d H:i:s', PHP_INT_MAX); // 2038-01-19 04:14:07
それ以降の日付で作業する場合は、 DateTime API の使用を検討してください。例:.
$dt = new DateTime('1st January 2999');
$dt->add(DateInterval::createFromDateString('+1 day'));
echo $dt->format('Y-m-d H:i:s'); // 2999-01-02 00:00:00
echo $dt->format('U'); // 32472226800
Y2038問題は64ビットシステムには当てはまらないことに注意してください。
私が知っている最短の方法は、明日の日付を取得することです。
date( "Y-n-j"、strtotime( "+ 1 day"))
64ビットシステムのdate("Y-n-j", PHP_INT_MAX)
は、潜在的に危険な値を示します:292277026596-12-4
DateTimeは64ビットサーバーでも32ビットを使用しているようです。だからあなたはトラブルに巻き込まれます。
私はそれをこのように解決しました:
new DateTime("99999/12/31 00:00:00");
日付はDateTimeの最大長をオーバーフローするため、dateは最大可能値を使用し、次のようなDateTimeオブジェクトを返します(var_dumpで検査)。
object(DateTime)#9 (3) { ["date"]=> string(19) "2031-09-12 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" } }
PHPのバージョンと異なるかどうかはわかりません。バージョン5.4でテストしました。
64ビットプラットフォームの場合PHP_INT_MAX
は、32ビットプラットフォームの最大INT値を反映していません。入手方法は次のとおりです。
$max32bitInt = PHP_INT_SIZE == 4 ? PHP_INT_MAX : PHP_INT_MAX>>32;
常に64ビットプラットフォームを使用している場合は、次を使用してください。
PHP_INT_MAX>>32