我想在当前日期添加几天。我使用以下代码。
$arrSearchValues=1000;
$datToDate = date('Y-m-d', strtotime("+$arrSearchValues days"));
一切正常,直到天数超过 9070。在这个数字之上,结果日期为“1970-01-01”。有什么办法可以克服这个问题吗?请帮我举个例子
我想在当前日期添加几天。我使用以下代码。
$arrSearchValues=1000;
$datToDate = date('Y-m-d', strtotime("+$arrSearchValues days"));
一切正常,直到天数超过 9070。在这个数字之上,结果日期为“1970-01-01”。有什么办法可以克服这个问题吗?请帮我举个例子
根据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";
}
2038 年 1 月 19 日是一个特殊的日子:在那一天,基于Unix 时间的 32 位日期/时间实现 用完了表示日期和时间的位,这就是加法溢出并将结果重置为开头的原因Unix 时代(1970 年 1 月 1 日)。
要绕过此限制,请切换到使用DateTime
和朋友:
$d = new DateTime();
$d->modify("+10000 days");
echo $d->format("Y-m-d");
试试这个,它应该是最快的方法:
$arrSearchValues=time()+1000*24*60*60;
$datToDate = date('Y-m-d', $arrSearchValues);
抱歉,我忘了使用 time(),检查更新的代码。