【发布时间】:2013-03-20 08:50:19
【问题描述】:
我想在当前日期添加几天。我使用以下代码。
$arrSearchValues=1000;
$datToDate = date('Y-m-d', strtotime("+$arrSearchValues days"));
在天数超过 9070 之前一切正常。超过此数字的结果日期为“1970-01-01”。有什么办法可以解决这个问题吗?请帮我举个例子
【问题讨论】:
标签: php
我想在当前日期添加几天。我使用以下代码。
$arrSearchValues=1000;
$datToDate = date('Y-m-d', strtotime("+$arrSearchValues days"));
在天数超过 9070 之前一切正常。超过此数字的结果日期为“1970-01-01”。有什么办法可以解决这个问题吗?请帮我举个例子
【问题讨论】:
标签: php
2038 年 1 月 19 日是一个特殊的日子:那天,32 位日期/时间实现基于 Unix time run out of bits 来表示日期和时间,这就是为什么加法溢出并将结果重置为Unix 时代的开始(1970 年 1 月 1 日)。
要绕过此限制,请改用DateTime 和朋友:
$d = new DateTime();
$d->modify("+10000 days");
echo $d->format("Y-m-d");
【讨论】:
DateTime 工作正常,没有错误显示。
根据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";
}
【讨论】:
试试这个,应该是最快的方法:
$arrSearchValues=time()+1000*24*60*60;
$datToDate = date('Y-m-d', $arrSearchValues);
抱歉,我忘了使用 time(),检查更新的代码。
【讨论】: