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