【问题标题】:Current date + 2 months当前日期 + 2 个月
【发布时间】:2012-05-22 03:09:04
【问题描述】:

我写这段代码是为了显示当前日期+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。

我做错了什么?

感谢您的帮助。

编辑:

看完cmets和答案,我简化并更正了。

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

【问题讨论】:

  • 尝试在+2 之前放置一个空格。并且可能使用两个变量 - 对不同类型的数据反复使用相同的变量名称是令人困惑和不好的做法。
  • 正确的返回值检查也有帮助。

标签: php date strtotime


【解决方案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');

【讨论】:

    【解决方案2】:

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

    所以我想这是最安全的:

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

    先将日期改为第一天。

    【讨论】:

      【解决方案3】:

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

      echo date('d/m/Y', strtotime('+2 months'));
      

      【讨论】:

      • 使用 strotime 时要格外小心。在 7 月 31 日,date('dmY') 产生“31072014”,而 date('dmY', strotime('-1 month')) 产生“01072014”(我预计是“30062014”)。
      【解决方案4】:

      尝试使用DateTime object

      $date = new DateTime("+2 months");
      echo $date->format("d/m/Y");
      

      【讨论】:

      • 正确,但与本案无关。
      • 为什么这个答案不相关?只是好奇@StanislavShabalin
      • @MuhammadIbnuh 说实话,五年后我不记得或弄明白了 :-) 也许是因为当你已经拥有 strtotime 时为什么还要使用 DateTime 并且只需修复一个就可以了与接受的答案中的拼写错误。
      • @StanislavShabalin, strtotime 没有给出正确的答案,试试这个,如果你当前的日期是 2019 年 2 月 1 日,那么再加上 2 个月并尝试......它给出了 2019 年 3 月 2 日。它需要是2019年4月1日。兄弟有什么解决办法吗?请提供
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多