在日期中添加一个月会返回错误的日期

时间:2018-10-28 17:00:34

标签: php datetime

我想向当前日期添加一个月。我在stackoverflow上找到了一个代码,它可以工作-但是,返回错误的一天。它会从当前日期中删除一天。

代码:

    function add_months($months, DateTime $dateObject) 
        {
            $next = new DateTime($dateObject->format('Y-m-d H:i:s'));
            $next->modify('last day of +'.$months.' month');
            if($dateObject->format('d') > $next->format('d')) {
                return $dateObject->diff($next);
            } else {
                return new DateInterval('P'.$months.'M');
            }
        }

    function endCycle($d1, $months)
        {
            $date = new DateTime($d1);
            $newDate = $date->add(add_months($months, $date));
            $newDate->sub(new DateInterval('P1D')); 
            $dateReturned = $newDate->format('Y-m-d H:i:s'); 
            return $dateReturned;
        }

$today = date("Y-m-d H:i:s");
$ymd = DateTime::createFromFormat('Y-m-d H:i:s', $today)->format('Y-m-d H:i:s');
echo(endCycle($ymd, 1)); //returns wrong day

因此,当我购买一个月时,我有29天的时间。当我再次购买时,我得到-2天,因为它从数据库中现有的过期日期中删除了这一天。 日期计算出了什么问题?..

谢谢:) 最好的问候

1 个答案:

答案 0 :(得分:0)

请不要将简单的任务复杂化。

http://php.net/manual/en/datetime.modify.php

<?php
  $date = new DateTime('2006-12-12');
  $date->modify('+1 month');
  echo $date->format('Y-m-d');
?>

这就是您所需要的。