5

我写了这段代码

echo date("Y-m-d", strtotime($date, strtotime("+ " . $days . " days")));

$date = 2012-04-12
$days = 15

我希望将$days(15 天)添加到2012-04-12我期望获得的日期()中,2012-04-27并且此代码返回我2012-04-12,我做错了什么?

4

6 回答 6

8
echo date('Y-m-d', strtotime('+15 days', strtotime('2012-04-12')));
于 2012-04-12T18:16:25.730 回答
5

不要使用 strtotime()。这是不可靠的,尽管你并没有真正做任何会真正回来咬你臀部的事情。但是依赖 strtotime 仍然是一件坏事,因为它会让你的生活在某个时候变得悲惨。

请改用DateTime

$now = DateTime::CreateFromFormat('Y-m-d', '2012-04-12');
$then = $now->add(new DateInterval('P15D'));
$date = $then->format('Y-m-d');
于 2012-04-12T18:13:57.770 回答
2
$date = '2012-04-12';
$days = 15;
echo date('Y-m-d', strtotime("$date +$days days") );
于 2012-04-12T18:15:25.293 回答
1
echo date("Y-m-d", strtotime("+$days days", $date));
于 2012-04-12T18:13:43.627 回答
1

你的语法不正确。将代码全部放在一行中没有必要,甚至没有帮助。在这种情况下,我们看到尝试这样做会导致语法问题。不要害怕几个额外的小变量!

$date = '2012-04-12';
$days = 15;

$ts = strtotime($date);
$new_ts = strtotime('+'.$days.' days', $ts);
$new_date = date('Y-m-d', $new_ts);

清晰、易读、易调试。如果你喜欢代码高尔夫,你可以把它放在一行中,但是有一种更清晰的写法:

$new_date = date (
    'Y-m-d',
    strtotime (
        '+'.$days.' days',
        strtotime($date)
    )
);

文档

于 2012-04-12T18:17:40.940 回答
0

为什么不直接使用DateTime类?

$date = new DateTime();
$date->add(new DateInterval('P15D'));
于 2012-04-12T18:13:20.843 回答