PHP バージョン 5.3.8 を使用していますが、mktime が機能しません
ここにコードがあります
$dated= mktime(0,0,0,11,5,2038);
var_dump($dated);
出力は bool(false) です。修正を提案してください
PHP バージョン 5.3.8 を使用していますが、mktime が機能しません
ここにコードがあります
$dated= mktime(0,0,0,11,5,2038);
var_dump($dated);
出力は bool(false) です。修正を提案してください
mktime は、整数であるタイムスタンプを返します (PHP では、実際には符号付き整数です)。したがって、32 ビット システムで可能な最大タイムスタンプは次のとおりです19 Jan 2038 03:14:07 UTC
(その後、整数オーバーフローが発生します)。タイムスタンプを大きくするには、64 ビット整数が必要です。
PHPマニュアルから:
PHP 5.1.0 より前では、負のタイムスタンプは既知のバージョンの Windows やその他のシステムではサポートされていませんでした。したがって、有効な年の範囲は 1970 年から 2038 年までに制限されていました。
考えられる解決策の 1 つは、 ADOdb Date Time Libraryを使用することです。このライブラリは、ネイティブ関数の符号付き整数 (通常は 32 ビット) を PHP 浮動小数点数 (通常は 64 ビット) に置き換えることで、この制限を克服します。
C/C++ ライブラリを使用して時間を変換する場合の 3 つの重要事項。
標準ライブラリの gmtime() または localtime() は time_t から struct tm に変換しますが、time_t の分解能はエポックからの秒数です。したがって、小数秒はカウントされません。
mktime() は struct tm から time_t に逆変換しますが、入力日付が範囲外の場合は -1 を返します。(2038 年問題を参照: http://en.wikipedia.org/wiki/Year_2038_problem )
64 ビット タイムスタンプを使用していない場合は、64 ビット マシンでプログラムを実行しても、2038 年問題が発生します。gmtime64()、localtime64()、mktime64() などの 64 ビット バージョンの関数があり、年が範囲外の問題を解決する可能性があります。(参照ページ: http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frtref%2Fmktime64.htm )
boost ライブラリを使用しても 2038 年問題を解決できないという回答。そのページから次のことに注意してください:「内部的に boost::gregorian::date は 32 ビット整数型として格納されます。」