Doctrine2以错误的方式将日期类型值转换为SQL格式

时间:2016-02-18 10:29:37

标签: mysql symfony date datetime doctrine-orm

我还不知道具体问题在哪里...... 我有一个带有日期字段的Doctrine实体:

/**
 * @var \DateTime
 *
 * @ORM\Column(name="day", type="date")
 */
private $day;

我还有一个带有日期类型字段的实体表单:

$builder->add('day', DateType::class, ['widget' => 'single_text'])

当我尝试保存带有价值的表格" 2016-02-14"我看到它变成了" 2016-02-13" (一天前)在MySQL和PHP中保存后。当我开始查找日志时,我看到查询参数值为" 2016-02-13 23:00:00"。

但我不明白为什么会这样。 我在系统(Ubuntu),PHP和MySQL(欧洲/莫斯科时区)中拥有相同的时间和时区。

我使用日期类型,而不是日期时间,所以根本不应该有时间。

当我尝试调试它时,我看到了代码

    #vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateType.php

    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        return ($value !== null)
            ? $value->format($platform->getDateFormatString()) : null;
    }

正常工作。它使格式正确" Y-m-d",但在symfony日志值中随时间变化。

我需要一个关于如何查找我的日期转换的建议。

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题并且使用了快速而肮脏的黑客攻击。在用于$ day属性的setter上,只需将时间设置为中午。

public function setDay(\DateTime $day)
{
    $this->day = $day;
    $this->day->setTime(12, 0, 0);

    return $this;
}