发票::setDueDate()必须实现接口DateTimeInterface, Xero API使用calcinai



我遵循这个包装

我有这个错误:可捕获的致命错误:参数1传递给XeroPHPModelsAccountingInvoice::setDueDate()必须实现接口DateTimeInterface,字符串给定

这是我的代码:

try{
            $lineitem = new LineItem($this->_xi);
            $lineitem->setAccountCode('200')
            ->setQuantity('5.400')
            ->setDescription('this is awesome test')
            ->setUnitAmount('9900.00');
            $contact = new Contact($this->_xi);
            $contact->setName("John Doe")
                ->setFirstName("John")
                ->setLastName("Doe")
                ->setEmailAddress("johngwapo@hot.com")
                ->setContactStatus(Contact::CONTACT_STATUS_ACTIVE);

            $invoice = new Invoice($this->_xi);
            $invoice->setType(Invoice::INVOICE_TYPE_ACCREC)
                ->setStatus(Invoice::INVOICE_STATUS_AUTHORISED)
                ->setContact($contact)
                //->setDate(DateTimeInterface::format("Y-m-d"))
                ->setDueDate("2018-09-09")
                ->setLineAmountType(Invoice::LINEAMOUNT_TYPE_EXCLUSIVE)
                ->addLineItem($lineitem)
                ->setInvoiceNumber('10')
                ->save();

        }catch ( Exception $e ){
            $GLOBALS['log']->fatal('[Xero-createContact]-' . $e->getMessage());
            echo $e->getMessage();
        }

当我试着这样做的时候:

->setDueDate(DateTimeInterface::format("Y-m-d"))
致命错误:非静态方法DateTimeInterface::format()不能静态调用,假设$this来自不兼容的上下文

这是我正在调用的setDueDate函数:

 /**
     * @param DateTimeInterface $value
     * @return Invoice
     */
public function setDueDate(DateTimeInterface $value)
    {
        $this->propertyUpdated('DueDate', $value);
        $this->_data['DueDate'] = $value;
        return $this;
    }

我真的失去了在这里,我如何使用这个DateTimeInterface和我如何可以设置一个未来的日期使用它,以及我如何解决所有这些错误。

第一个错误说,->setDueDate($date)方法期望一个实现DateTimeInterface的对象,但是您只提供了一个字符串而不是->setDueDate("2018-09-09")

第二个错误说,format($format)方法不能静态调用。它需要一个格式模式,并根据提供的模式将现有对象格式化为字符串。然而,您尝试静态调用它,提供日期字符串而不是格式模式-难怪它失败了。您需要createFromFormat($format, $date_string)方法,它从字符串创建DateTime对象,而不是其他方法。

解决方案是创建一个实现DateTimeInterface的对象。例如DateTime或DateTimeImmutable (它是相同的,但从未被修改)。如果您可以稍后修改此值,我建议使用DateTime。

改变这一行:

->setDueDate("2018-09-09")

:

->setDueDate(DateTime::createFromFormat('Y-m-d', "2018-09-09"))

相关内容

  • 没有找到相关文章

最新更新