0

我想将列的表: created_on 从 DateTime 类型转换为 Bigint 类型。
这样它将当前日期时间值保存到 MySQL 数据库表中。

在我试图调用该方法时从控制器

$smiledMoment->setCreatedValues();

在我的实体文件中:

     /**
     * @param integer $created_on
     *
     * @ORM\Column(name="created_on", type="bigint")
     */

    protected $created_on;
     /**
     * Set created_on
     *
     * @param integer $created_on
     * @return SmiledMoment
     */
    public function setCreatedOn($created_on)
    {

        $datetime = (array) $created_on;
        $dat = strtotime($datetime['date']);
        //echo $dat->format('d/m/Y');
        //exit;
        $this->created_on = $dat;
        return $this;
    }
    /**
     * Get created_on
     *
     * @return \DateTime
     */
    public function getCreatedOn()
    {
        return $this->created_on;
    }

    /**
     * Set initial value for created_on/modified_on values
     *
     * @ORM\PrePersist
     */
    public function setCreatedValues()
    {

        $this->setCreatedOn(new \DateTime());
    }

从 $dat 值生成为 1517900080(即时间戳值)。
但不幸的是,我遇到了一个错误

UTCDateTimeType.php 第 25 行中的 FatalThrowableError:在整数上调用成员函数 getTimezone()

4

3 回答 3

1

您需要先将 UNIX 时间戳转换为 DateTime 对象,如下所示:$dt = new DateTime('@' . $timestamp);

于 2018-02-06T08:02:27.863 回答
1

有几种方法可以处理这个问题,但是如果我们继续沿着你的路径前进,我们将返回一个DateTime对象。要做到这一点,你需要将你int的时间转换回来。

/**
 * Get created_on
 *
 * @return \DateTime
 */
public function getCreatedOn()
{
    $date = new DateTime();
    return $date->setTimestamp($created_on);
}
于 2018-02-06T08:02:45.720 回答
0

如果您真的想将 MySql 数据库中的日期存储为整数 - 实现这一点的最合适方法 - 是创建自定义 Doctrine 的映射类型。 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/custom-mapping-types.html

要获得如何做到这一点的一些线索,请查看教义 DateTimeType 的默认实现: https ://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Types/DateTimeType.php

于 2018-02-06T12:43:35.527 回答