使用学说查询时从 PostgresDB 获取错误的日期错误的偏移量

问题描述

我对 Symfony 和 Doctrine 中的 tz(时区)和日期类型完全感到困惑。 我们使用 Symfony 5 和 Postgressql 作为数据库。在数据库中,我们对所有日期使用时间戳记,在实体中,我们将所有日期都定义为 datetimetz。

@ORM\Column(type="datetimetz",nullable=true)

当我们使用学说查询构建器 (createquery) 创建查询时,我们总是会丢失数据库中保存的偏移量(时区)。示例:在我们的数据库中:

Date: 2021-05-10 00:06:35
Offset: 2.0

作为查询的结果,我们得到:

[date] => 2021-05-09 22:06:35.000000
[timezone_type] => 1
[timezone] => +00:00

顺便说一句:我们在使用存储库 (getRepository) 而不是直接查询时得到了相同的结果。

我的问题:我的日期在哪里转换,为什么?是在数据库站点还是在 PHP 级别?

顺便说一句。 2:数据库认偏移设置为Europe/BerlinPHP端也设置为date_default_timezone_set

解决方法

postgres 中带有 timezones TZ 的质量不是拥有它,而是在完整环境中处理它。特别是在 Symfony(PHP) 中,我们需要将保存的时区添加到每个日期。

写作示例:

$booking->setUpdated(new \DateTime('now',new \DateTimeZone('Europe/Berlin')));

阅读示例:

date_timezone_set(@$this->getInserted(),timezone_open('Europe/Berlin'));   

这就是我的解决方案。