Symfony 在数据库中以UTC格式保存的Behat测试用例中断言日期时间

Symfony 在数据库中以UTC格式保存的Behat测试用例中断言日期时间,symfony,datetime,utc,behat,Symfony,Datetime,Utc,Behat,我已经创建了Behat测试用例来断言datetime。 Datetime已以UTC格式存储在我的数据库中。因此,使用IntlDateFormatter函数根据所选语言环境(如en、de或fr)进行转换 我面临的问题是,behat测试用例在我的本地机器上运行良好,但在服务器上,我必须断言datetime和数据库值UTC格式相同 例如,保存的值为2016-01-01 00:00:00。 从UTC转换回php值后,现场显示的值为“01-01-2016 01:00” 使用“01-01-2016 01:0

我已经创建了Behat测试用例来断言datetime。 Datetime已以UTC格式存储在我的数据库中。因此,使用IntlDateFormatter函数根据所选语言环境(如en、de或fr)进行转换

我面临的问题是,behat测试用例在我的本地机器上运行良好,但在服务器上,我必须断言datetime和数据库值UTC格式相同

例如,保存的值为2016-01-01 00:00:00。 从UTC转换回php值后,现场显示的值为“01-01-2016 01:00”

使用“01-01-2016 01:00”进行本地断言。 但在服务器上,它使用的是“01-01-2016 00:00”,而不是“01-01-2016 01:00”


有人能告诉我为什么behat测试用例在datetime断言中失败吗?

在创建日期时,您似乎忽略了时区设置

您需要在创建日期的所有位置(代码和行为测试)显式定义时区,或者确保所有环境都具有相同的时区设置(可能是数据库)


第二个选择对你来说可能更容易、更快。第一个是更加防弹的。

给我们看一些代码……我的项目是在symfony2中,所以使用UTCDateTimeType类存储在数据库中。并使用选定的区域设置和格式进行转换,如<代码>$formatter=new\IntlDateFormatter($this->locale\IntlDateFormatter::LONG,$time?\IntlDateFormatter::SHORT:\IntlDateFormatter::NONE)$格式化程序->设置模式($time?$this->getDateFormat($this->locale):strtok($this->getDateFormat($this->locale),“”)Behat测试用例行失败,然后我应该看到“01/01/2016 01:00”UTC日期时间类型类通过将服务器时区转换为UTC并返回UTC到服务器时区来自动处理。您确定也以UTC显示它吗?谢谢Jakub,问题已解决我已应用时区,但问题在服务器端设置默认时区。