我尝试将 7 天添加到 2013-10-26 并返回 2013-11-01。但它必须是 2013-11-02。我的旧功能是这样的:
public static function add($date, $years = 0, $months = 0, $days = 0)
{
$date = explode('-', $date);
return date(
'Y-m-d',
mktime(0, 0, 0, $date[1] + $months, $date[2] + $days, $date[0] + $years)
);
}
这是正确的,但太慢了。我做了一个更专业的新的:
public static function adddays($date, $days = 1)
{
if ($days == 0) return $date;
return date('Y-m-d', strtotime($date) + 86400 * $days);
}
它的工作原理大部分是正确的。在这种情况下不是。如果你让计算 strtotime('2013-10-26') % 86400 那么你会发现它是晚上 10 点。由于某种原因,它有所作为。
我正在使用版本 5.3.2。
速度测试:
3 个版本重复 1000 次运行
DateTime : +7 day : strtotime
26ms : 43ms : 41ms
30ms : 44ms : 42ms
25ms : 42ms : 43ms
30ms : 48ms : 49ms
所以更多的行和更快的结果。我选择 Amal 的 DateTime。
$date = new DateTime('2013-10-26');
$days_to_add = 7;
$date->add(new DateInterval('P' . $days_to_add . 'D'));
$date->format('Y-m-d');
谢谢你。但是仍然存在为什么它从一开始就不能正常工作的问题。