我需要在next_payment_date
属性中保留starts_at
的值,添加到check_for
的值,可以是30
或60
。换句话说,如果我的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
?
答案 0 :(得分:0)
如果$startsAt
是Datetime
对象:
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'));
}