添加到DateInterval以前给定的\ DateTime +天

时间:2015-10-26 04:45:56

标签: symfony datetime add

我需要在next_payment_date属性中保留starts_at的值,添加到check_for的值,可以是3060 。换句话说,如果我的start_date是2015-10-30,我需要添加30或60天,然后设置为next_payment_date

这是一个PreUpdate方法,在我的预算实体持久保存到数据库中时执行:

/**
 * @ORM\PrePersist
 * @ORM\PreUpdate
 */
public function onPre()
{
    $this->getBudget()->setNextPaymentDate($this->generateNextPaymentDate());
}

首次尝试设置我的next_payment_date

public function generateNextPaymentDate()
{
    $startsAt = $this->getBudget()->getStartsAt();

    if ($startsAt !== null) {
        return $startsAt->add(new \DateInterval('P' . $this->getBudget()->getCheckFor() . 'D'));
    }
}

然后,我有了另一个想法。由于日期主要是NULL,我之前添加了starts_at值,然后修改了:

public function generateNextPaymentDate()
{
    $this->getBudget()->setNextPaymentDate($this->getBudget()->getStartsAt());

    return $this->getBudget()->getNextPaymentDate()->modify('+' . $this->getBudget()->getCheckFor() . ' day');
}

但不知何故给出了同样的结果。 starts_at属性与next_payment_date一起更新,两者都具有相同的值。如何仅更新next_payment_date

2 个答案:

答案 0 :(得分:0)

如果$startsAtDatetime对象:

public function generateNextPaymentDate()
{
    const NEXT_DATE = '+30days';

    $startsAt = $this->getBudget()->getStartsAt();

    if ($startsAt !== null) {
         return $startsAt->modify(self::NEXT_DATE);
    }
}

答案 1 :(得分:0)

这是我找到的解决方案:

public function generateNextPaymentDate()
{
    $date = new \DateTime($this->getBudget()->getStartsAt()->format('Y-m-d'));
    return $date->add(new \DateInterval('P' . $this->getBudget()->getCheckFor(). 'D'));
}