22

我编写了这段代码以显示当前日期 + 2 个月:

<?php
    $date = date("d/m/Y");
    $date = strtotime(date("d/m/Y", strtotime($date)) . "+2 months");
    $date = date("d/m/Y",$date);
    echo $date;
?>

它似乎不起作用,因为它显示:01/03/1970。

我究竟做错了什么?

谢谢你的帮助。

编辑 :

阅读评论和答案后,我对其进行了简化和更正。

<?php
    $date = date("d/m/Y", strtotime(" +2 months"));
    echo $date;
?>
4

4 回答 4

42

您缺少第二次strtotime()调用的第二个参数:

echo date('d/m/Y', strtotime('+2 months'));
于 2012-05-14T15:45:02.407 回答
13

尝试使用DateTime 对象

$date = new DateTime("+2 months");
echo $date->format("d/m/Y");
于 2012-05-14T15:44:51.900 回答
3

如果今天是“YYYY-mm-31”,而下个月没有第31天,则显示下个月该天,使系统显示“+3个月”的结果,而不是“+2个月”的结果。

所以我想这是最安全的:

$end_date=date("Y-m-d",strtotime("+2 month",strtotime(date("Y-m-01",strtotime("now") ) )));

首先将日期更改为第一天。

于 2016-07-28T03:48:34.737 回答
3

使用DateTime->add()DateTime->modify()

如果您正在使用现有的 DateTime 对象,则可以使用以下之一:

// Your date
$date = new DateTime(); // empty for now or pass any date string as param

// Adding
$date->add(new DateInterval('P2M')); // where P2M means "plus 2 months"

// or even easier
$date->modify('+2 months');

// Checking
echo $date->format('Y-m-d');

注意PHP 中添加月份,如果原始日期中的天数大于新月份的总天数,可能会溢出到下个月。添加年份时,闰年也会发生同样的溢出。不知何故,PHP 开发人员不认为这是一个错误,只是在没有解决方案的情况下记录在案。更多信息: PHP DateTime::modify 添加和减去月份

我发现这是解决溢出问题的最直接的解决方案:

$day = $date->format('j');
$date->modify('first day of +2 months')->modify('+'. (min($day, $date->format('t')) - 1) .' days');
于 2018-03-11T14:45:28.847 回答