0

我想在当前日期添加几天。我使用以下代码。

$arrSearchValues=1000;

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

一切正常,直到天数超过 9070。在这个数字之上,结果日期为“1970-01-01”。有什么办法可以克服这个问题吗?请帮我举个例子

4

3 回答 3

2

根据http://php.net/manual/en/function.strtotime.php

时间戳的有效范围通常是从 1901 年 12 月 13 日星期五 20:45:54 UTC 到 2038 年 1 月 19 日星期二 03:14:07 UTC。(这些日期对应于 32 位有符号整数的最小值和最大值。)

9070 天后,您的时间戳超出范围,因此您没有获得有效的时间戳,因此出现错误

如果时间戳无效,您可以显示错误

$arrSearchValues = 1000;
if(strtotime("+$arrSearchValues days"))
{
   $datToDate = date('Y-m-d', strtotime("+$arrSearchValues days"));
}
else
{
    echo "Out of range";
}
于 2013-03-20T08:57:10.903 回答
2

2038 年 1 月 19 日是一个特殊的日子:在那一天,基于Unix 时间的 32 位日期/时间实现 用完了表示日期和时间的位,这就是加法溢出并将结果重置为开头的原因Unix 时代(1970 年 1 月 1 日)。

要绕过此限制,请切换到使用DateTime和朋友:

$d = new DateTime();
$d->modify("+10000 days");
echo $d->format("Y-m-d");
于 2013-03-20T08:57:35.433 回答
0

试试这个,它应该是最快的方法:

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

抱歉,我忘了使用 time(),检查更新的代码。

于 2013-03-20T08:56:47.383 回答