PHP在新变量的日期中添加天数会更改其他变量

时间:2018-12-23 12:51:21

标签: php

我有一个变量invoiceDate,它是一种datetime类型。我通过向dueDate添加14天,得出以下内容来计算invoiceDate

private $invoiceDate; // this is any datetime. 
private $dueDate;

public function calculateDueDate(){
    $due = date_add($this->invoiceDate, new \DateInterval('P14D'))  ;
    return $due;
}

public function getInvoiceDate()
{
    return $this->invoiceDate;
}

public function getDueDate()
{
    $this->dueDate = $this->calculateDueDate();
    return $this->dueDate;
}

我没有得到的是,当我使用方法getDueDate()getInvoiceDate()时,两种方法都总是得到原始的invoiceDate加14天。为什么原始日期会受到影响,我该怎么办?

1 个答案:

答案 0 :(得分:4)

打开date_add手册,发现date_add的第一个参数是:

  

DateTime返回的date_create()对象。函数修改此对象

因此,您需要修改另一个对象,例如克隆:

public function calculateDueDate(){
    $due = date_add(
        clone $this->invoiceDate, 
        new \DateInterval('P14D')
    );
    return $due;
}