PHP Fatal error: Call to a member function format() on string

PHP Fatal error: Call to a member function format() on string

我正在尝试使用 Doctrine 将日期保存到 SQL 数据库中。 用户使用日期选择器将日期写入输入字段,它们的格式为 dd.mm.yyyy(德语)。在数据库中,日期看起来像这样 "2021-09-30" 或这个 "0000-00-00" 如果没有给出日期

我正在使用此代码将输入数据设置为实体:

if(isset($formData["startDate"]) and $formData["startDate"] != "") {
    $sD = explode(".", $formData["startDate"]);
    $campaign->setStartDate(($sD[2]."-".$sD[1]."-".$sD[0]));
} else {
    $campaign->setStartDate("0000-00-00")
}

但这会产生错误 Fatal error: Call to a member function format() on string。 如何将日期保存到我的数据库?

这是字段 getter/setter:

/**
 * @ORM\Column(type="date")
 */
protected $startDate;



/**
 * Set startDate
 *
 * @param integer $startDate
 * @return Campaign
 */
public function setStartDate($startDate)
{
    $this->startDate = $startDate;

    return $this;
}

/**
 * Get startDate
 *
 * @return integer
 */
public function getStartDate()
{
    return $this->startDate;
}

首先,你可以用\DateTimeInterface定义你的setter/getter,像这样

/**
 * @ORM\Column(type="datetime", options={"default":"0000-00-00 00:00:00"})
 */
 protected $startDate;

/**
 * Set startDate
 *
 * @param \DateTimeInterface $startDate
 * @return Campaign
 */
public function setStartDate(\DateTimeInterface $startDate)
{
    $this->startDate = $startDate;

    return $this;
}

/**
 * Get startDate
 *
 * @return \DateTimeInterface
 */
public function getStartDate()
{
    return $this->startDate;
}

那么,你应该会有更好的输出。请注意 0000-00-00 00:00:00 是无效日期...

对于你的错误,你可以这样做

if(isset($formData["startDate"]) && !empty($formData["startDate"])) {
    $date = DateTime::createFromFormat('Y\.m\.d', $formData["startDate"]);
} else {
    $date = new DateTime('now');
}

$campaign->setStartDate($date);

希望对您有所帮助