Symfony2-Doctrine светильники createdAt, появляющиеся как час раньше фактического времени


Раньше со мной такого не случалось, но я только что заметил, что вся моя фиктивная информация о приспособлении (сообщения) появляется с созданным временем на час раньше фактического времени?

Когда я вручную ввожу в пост правильное время.

Любая идея, что является причиной этого?

Я использую файл сущности с временной меткой для createdAt и updatedAt, который расширяется моей сущностью Post. Файл сущности с временной меткой использует stof / doctrine-extensions-bundle.

Объект с временной меткой

use DoctrineORMMapping as ORM;
use GedmoMappingAnnotation as Gedmo;

/**
 * Timestampable abstract class to define created and updated behavior
 *
 * @ORMMappedSuperclass
 */
abstract class Timestampable
{
/**
 * @var DateTime
 *
 * @GedmoTimestampable(on="create")
 * @ORMColumn(name="created_at", type="datetime")
 */
private $createdAt;

/**
 * @var DateTime
 *
 * @GedmoTimestampable(on="update")
 * @ORMColumn(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;
}

}

Приспособление столба:

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.)
}
1 2

1 ответ:

Похоже, у вас проблема с часовыми поясами против Timestampable. Данные вашего прибора хранятся в часовом поясе UTC.

Смотрите этот пост (читайте комментарии о часовых поясах):
Symfony2 datetime лучший способ хранения меток времени?

В этом посте выше есть ссылка на интересную запись в блоге, которая может помочь вам найти решение, которое наилучшим образом соответствует вашему сценарию.:
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 );
}