Хранение Doctrine2 DateTime только в формате UTC

есть похожие вопросы,но я не смог найти никаких относящихся к конфигурации Doctrine2, поэтому здесь идет...

Я прочитал эту страницу, описывающую часовые пояса для Doctrine2, и я просто хочу уточнить, потому что не ясно, как на самом деле использовать это: http://doctrine-orm.readthedocs.org/en/latest/cookbook/working-with-datetime.html

Я хочу хранить даты в UTC, чтобы каждый пользователь мог иметь связанный часовой пояс на основе их местоположения но данные хранятся в общем виде.

в основном, данные-это часы для магазина (например, открываются в 9 утра и закрываются в 6 вечера). Магазин будет отслеживать свой часовой пояс, поэтому, когда человек в магазине устанавливает "открытое" время, они имеют дело с часовым поясом магазина, время преобразуется в UTC и хранится в базе данных. Затем, когда другой пользователь просматривает часы магазинов, они будут видеть время открытия в своем собственном часовом поясе или часовом поясе магазина. Это не должно иметь значения, потому что я имейте время в UTC, поэтому я могу преобразовать их в любой часовой пояс.

таким образом, документы доктрины показывают этот пример:

class UTCDateTimeType extends DateTimeType
{
// ...
}

но он не говорит, как его использовать. Должен ли я объявлять столбцы как "UTCDateTime" вместо "DateTime"? Где должен жить этот класс, чтобы доктрина знала о существовании этого типа?

2 ответов


Я просто нашел эту часть поста про поведение Timestampable, что, кажется, более простое решение:

config.в формате YML

doctrine:
    dbal:
        types: 
            datetime: Acme\DoctrineExtensions\DBAL\Types\UTCDateTimeType

вам нужно зарегистрировать тип в доктрине bootstrap и использовать UTCDateTime в вашем сопоставлении. Вот сообщение в блоге, которое объясняет, как это сделать: http://symfony2.ylly.fr/add-new-data-type-in-doctrine-2-in-symfony-2-jordscream/