Symfony2 - Doctrine fixtures createdAt 比实际时间提前一个小时出现

标签 symfony time doctrine-orm fixtures

我以前没有发生过这种情况,但我只是注意到我所有的虚拟 fixture 信息(帖子)都比实际时间提前一小时显示了 createdAt 时间?

当我手动输入帖子时,时间是正确的。

知道是什么原因造成的吗?

我正在为 createdAt 和 updatedAt 使用时间戳实体文件,我的 Post 实体正在扩展它。 Timestampable 实体文件正在使用 stof/doctrine-extensions-bundle。

时间戳实体

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * Timestampable abstract class to define created and updated behavior
 *
 * @ORM\MappedSuperclass
 */
abstract class Timestampable
{
/**
 * @var \DateTime
 *
 * @Gedmo\Timestampable(on="create")
 * @ORM\Column(name="created_at", type="datetime")
 */
private $createdAt;

/**
 * @var \DateTime
 *
 * @Gedmo\Timestampable(on="update")
 * @ORM\Column(name="updated_at", type="datetime", nullable=true)
 */
private $updatedAt;

/**
 * Set createdAt
 *
 * @param \DateTime $createdAt
 * @return Timestampable
 */
public function setCreatedAt($createdAt)
{
    $this->createdAt = $createdAt;

    return $this;
}

/**
 * Get createdAt
 *
 * @return \DateTime
 */
public function getCreatedAt()
{
    return $this->createdAt;
}

/**
 * Set updatedAt
 *
 * @param \DateTime $updatedAt
 * @return Timestampable
 */
public function setUpdatedAt($updatedAt)
{
    $this->updatedAt = $updatedAt;

    return $this;
}

/**
 * Get updatedAt
 *
 * @return \DateTime
 */
public function getUpdatedAt()
{
    return $this->updatedAt;
}

后 fixture :

public function load(ObjectManager $manager)
{
    $post1 = new Post();
    $post1->setCategory($this->getReference('category-1'));
    $post1->addReply($this->getReference('reply-1'));
    $post1->addReply($this->getReference('reply-2'));
    $post1->addReply($this->getReference('reply-3'));
    $post1->setTitle('Lorem Ipsum 1');
    $post1->setAuthor('Foo1');
    $post1->setBody('Lorem ipsum dolor sit amet, consectetur adipiscing elit.)
}

最佳答案

看起来您在时区与 Timestampable 方面存在问题。您的灯具数据存储在 UTC 时区。

请参阅此相关帖子(阅读有关时区的评论):
Symfony2 datetime best way to store timestamps?

上面这篇文章有一个有趣的博客条目的链接,可以帮助您找到最适合您的场景的解决方案:
https://matt.drollette.com/2012/07/user-specific-timezones-with-symfony2-and-twig-extensions/

编辑:

您可以使用 LifecycleCallback 为创建的值设置明确的时区。

/** 
* @ORM\Entity
* @ORM\HasLifecycleCallbacks()
**/

/* 
 ... 
*/

/**
 * @ORM\PrePersist
 */
public function setCreatedValue()
{
    $now = new \DateTime('now' , new \DateTimeZone('Europe/Berlin') );
    $this->setCreated( $now );
}

关于Symfony2 - Doctrine fixtures createdAt 比实际时间提前一个小时出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24005968/

相关文章:

python - 安排运行脚本的时间和日期

mysql - 第 1064 章

java - 如何在android中更改日期时间语言

php - Doctrine 删除最旧的条目

symfony - 更新到 Symfony 2.1.8 后 Doctrine 装置无法工作

forms - Symfony2 表格 : Generating checkboxes

MySQL 将时间转换为 HH :MM

php - Symfony2 中的类继承

php - Symfony 关联实体集合的高级过滤

Symfony2 : Connect to additional database, 没有所有附加功能?