Symfony在整数

时间:2018-02-06 07:12:06

标签: php symfony datetime timezone orocrm

我想将列表: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()在整数

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

有几种方法可以解决这个问题,但如果我们继续使用相同的路径,我们将返回DateTime个对象。为此,您需要将int转换回时间。

/**
 * Get created_on
 *
 * @return \DateTime
 */
public function getCreatedOn()
{
    $date = new DateTime();
    return $date->setTimestamp($created_on);
}

答案 2 :(得分:0)

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

要获得有关如何执行此操作的一些线索,请查看doctrine的DateTimeType的默认实现: https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Types/DateTimeType.php