我使用的PHP版本5.3.8 而mktime是不是爲我工作mktime不是爲年工作大於2038
這裏是代碼
$dated= mktime(0,0,0,11,5,2038);
var_dump($dated);
輸出是布爾(假) 請給我建議的修復
我使用的PHP版本5.3.8 而mktime是不是爲我工作mktime不是爲年工作大於2038
這裏是代碼
$dated= mktime(0,0,0,11,5,2038);
var_dump($dated);
輸出是布爾(假) 請給我建議的修復
乙在PHP 5.1.0之前,負面時間戳在任何 已知版本的Windows和其他一些系統中都不受支持。因此, 範圍的有效年限是通過2038
一個可能的解決方案僅限於1970年是使用ADOdb Date Time Library。該庫通過用PHP浮點數(通常爲64位)替換本機函數的有符號整數(通常爲32位)來克服限制。
請問我有什麼不好的? –
mktime返回時間戳,它是一個整數(在PHP中它實際上是一個有符號整數)。因此,32位系統的最大可能時間戳爲19 Jan 2038 03:14:07 UTC
(之後發生整數溢出)。對於更大的時間戳,你需要一個64位整數。
有關使用C/C++庫轉換時間的三件重要事情。
標準庫中的gmtime()或localtime()將time_t轉換爲struct tm,但time_t的分辨率是來自epoch的秒數。所以小數秒不會計數。
mktime()從struct tm向後轉換爲time_t,但如果輸入日期超出範圍,它將返回-1。 (請參閱年份2038問題:http://en.wikipedia.org/wiki/Year_2038_problem)
如果您不使用64位時間戳,即使您在64位計算機上運行程序,仍然存在2038年問題。有64位版本的功能,如gmtime64(),localtime64(),mktime64()可能會解決年度超出範圍問題。 (請參考頁面:http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frtref%2Fmktime64.htm)
使用boost庫無法解決2038年問題的答案。注意從它的頁面:「內部boost :: gregorian :: date存儲爲32位整數類型。」
向64位PHP建議更新或使用DateTime對象作爲與32位限制 –
完全一致的最大有效年限限制之外的哈希性日期值的方式:) – deex