我写了这段代码是为了显示当前日期+ 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;
?>
答案 0 :(得分:26)
你错过了第二个strtotime()
电话的第二个参数:
echo date('d/m/Y', strtotime('+2 months'));
答案 1 :(得分:9)
尝试使用DateTime object:
$date = new DateTime("+2 months");
echo $date->format("d/m/Y");
答案 2 :(得分:3)
如果今天是“YYYY-mm-31”而下个月没有第31天, 它将显示当天的下个月,使系统显示“+3个月”结果而不是“+2个月”结果。
所以我猜这是最安全的:
$end_date=date("Y-m-d",strtotime("+2 month",strtotime(date("Y-m-01",strtotime("now") ) )));
将日期更改为第一天。
答案 3 :(得分:1)
使用 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 adding and subtracting months
我发现这是解决溢出问题的最重要的解决方案:
$day = $date->format('j');
$date->modify('first day of +2 months')->modify('+'. (min($day, $date->format('t')) - 1) .' days');