Invoice::setDueDate() 必须使用 calcinai 实现接口 DateTimeInterface,Xero API
Invoice::setDueDate() must implement interface DateTimeInterface, Xero API using calcinai
我正在关注这个wrapper
我有这个错误:可捕获的致命错误:传递给 XeroPHP\Models\Accounting\Invoice::setDueDate() 的参数 1 必须实现接口 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)
method, which creates a DateTime 对象,而不是相反。
解决方案是创建一个实现 DateTimeInterface 的对象。例如 DateTime or DateTimeImmutable (相同,但从未修改)。如果您以后可以修改此值,我建议使用 DateTime。
因此更改此行:
->setDueDate("2018-09-09")
对此:
->setDueDate(\DateTime::createFromFormat('Y-m-d', "2018-09-09"))
它应该很有魅力。
我正在关注这个wrapper
我有这个错误:可捕获的致命错误:传递给 XeroPHP\Models\Accounting\Invoice::setDueDate() 的参数 1 必须实现接口 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)
method, which creates a DateTime 对象,而不是相反。
解决方案是创建一个实现 DateTimeInterface 的对象。例如 DateTime or DateTimeImmutable (相同,但从未修改)。如果您以后可以修改此值,我建议使用 DateTime。
因此更改此行:
->setDueDate("2018-09-09")
对此:
->setDueDate(\DateTime::createFromFormat('Y-m-d', "2018-09-09"))
它应该很有魅力。