【问题标题】:date_add gets Boolean instead of DateTimedate_add 获取布尔值而不是 DateTime
【发布时间】:2017-11-11 14:47:02
【问题描述】:

我的 Symfony 应用程序中有一个非常奇怪的错误,我不知道如何修复它。在添加一个特殊的DateInterval 后,我想在我的一个实体中设置一个DateTime 和DateTime。这是我的代码:

$dateInterval = new \DateInterval('P1DT6H');
$snoozedTo = date_add($sickNote->getSickTo(), $dateInterval);
$channelUser->setSnoozedTo($snoozedTo);
$this->em->persist($channelUser);

在我的 UnitTests 中出现以下错误:

date_add() expects parameter 1 to be DateTime, boolean given

所以我再次检查$sickNote->getSickTo() 是否真的返回DateTime。 dump() 返回:

DateTime {#17791
  +"date": "2018-01-01 06:00:00.000000"
  +"timezone_type": 3
  +"timezone": "UTC"
}

对象上的get_class() 返回DateTime。

这是我对该字段的附加 getter 方法:

/**
 * Get sickTo
 * @return Date
 */
public function getSickTo() {
    return $this->sickTo;
}

为什么date_add 得到Boolean 而不是DateTime 对象?

编辑:我也尝试了对象方法DateTime::add()。结果一样。

Edit²:这是我对sickTo的声明:

/**
 * @var datetime $sickTo
 * @ORM\Column(type="date", nullable=true)
 * @Assert\Date()
 */
protected $sickTo;

【问题讨论】:

  • 可以出示sickTo的声明吗?
  • 我为此编辑了我的问题。
  • 如果您尝试 @var \DateTime 和 type="datetime" ? (别忘了更新你的数据库)
  • type = datetime 正如@SylvainAttoumani 所说?
  • 谢谢大家。我必须将类型 type="datetime" 和断言更改为 @Assert\DateTime()。

标签: php symfony datetime php-7


【解决方案1】:

sickTo 的声明错误。您将其声明为日期,但您使用日期时间。尝试用类似的东西来改变它:

/**
 * @var \DateTime $sickTo
 * @ORM\Column(type="datetime", nullable=true)
 * @Assert\DateTime()
 */

protected $sickTo;

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    相关资源
    最近更新 更多