2013-03-20 101 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"; 
}