我在Symfony 2.0環境中使用Doctrine 2.1.7。爲了正確處理日期和時間,我使用了一個自定義的「日期時間」類型來在數據庫中保存UTC中的每個日期和時間。當我加載它們時,一切都轉換爲當前時區。這完美的作品,並配置是這樣的(在我的Symfony項目的config.yml
):自定義Doctrine2'datetime'類型還用於'日期'比較?
doctrine:
dbal:
default_connection: default
types:
datetime: Acme\DemoBundle\General\UTCDateTimeType
我有一個實體,稱爲Usage
與日期屬性,具有日期類型。某種程度上,我未能檢索到特定日期的任何使用信息,比如說2013-02-18。我最終打開了MySQL查詢的日誌,發現執行以下查詢:
...
FROM account a0_
LEFT JOIN resource_usage r1_
ON a0_.id = r1_.account_id AND (r1_.date = '2013-02-17 23:00:00')
WHERE...
因此,這裏的有趣的部分,我相信兩件事情出了問題。它出現了自定義datetime
類型轉換髮生(我在GMT + 1)和錯誤的日期格式字符串由Doctrine2使用。 Doctrine2在應用自定義日期時間時以某種方式覆蓋常規日期類型?或者我做錯了什麼?
(我使用的是WITH
結構在我的DQL,但是當我使用WHERE
內相同的比較,也出現。)
如果你有一個自定義的日期時間格式,你最終應該給它另一個名字,而不是覆蓋內置的一個。 – Ocramius 2013-02-19 10:53:17
@Ocramius參見Doctrine文檔,其建議OP的原始情況的類似解決方案 - http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/cookbook/working-with-datetime.html – richsage 2016-06-16 09:51:05