2013-03-20 189 views
0

我想添加一些日期到當前日期。我使用下面的代碼。將當天日期添加到當前日期

$arrSearchValues=1000; 

$datToDate = date('Y-m-d', strtotime("+$arrSearchValues days")); 

一切工作完美,直到天數超過9070.Above這個數字得到結果日期「1970-01-01」「。有什麼辦法來解決這個問題,請幫助我例如

回答

2

2038 1月19日是一個特殊的日子:在這一天,32位的日期/時間實現基於Unix timerun out of bits代表日期和時間,這這就是爲什麼添加溢出並且結果重置爲Unix epo的開始ch(1970年1月1日)。

要繞開這個限制,切換到使用DateTime,朋友們:

$d = new DateTime(); 
$d->modify("+10000 days"); 
echo $d->format("Y-m-d"); 
+1

不要你的意思是2038? – 2013-03-20 08:59:23

+0

@GarethCornish:我的確,謝謝。 :) – Jon 2013-03-20 08:59:41

+0

@Jon使用DateTime是正確的,但它不會修改時間戳..我的意思是答案將是錯誤的..它不是很好,而不是顯示錯誤? – alwaysLearn 2013-03-20 09:08:28

0

試試這個,它應該是最快的方法:

$arrSearchValues=time()+1000*24*60*60; 
$datToDate = date('Y-m-d', $arrSearchValues); 

對不起,我忘了使用的時間(),檢查更新的代碼。

2

作爲每http://php.net/manual/en/function.strtotime.php

時間戳的有效範圍通常爲星期五,1901年12月13日20時45分54秒到UTC星期二,2038年1月19日3點14分07秒UTC。 (這些是與32位有符號整數的最小值和最大值對應的日期。)

9070天后,您的時間戳超出範圍,因此您沒有得到有效的時間戳,從而導致錯誤

您可以顯示錯誤,如果沒有有效的時間戳

$arrSearchValues = 1000; 
if(strtotime("+$arrSearchValues days")) 
{ 
    $datToDate = date('Y-m-d', strtotime("+$arrSearchValues days")); 
} 
else 
{ 
    echo "Out of range"; 
}