Symfony JMSSerializer-如何将时区传递给序列化
我已将Symfony JMSSerializer-如何将时区传递给序列化,symfony,jmsserializerbundle,jms-serializer,Symfony,Jmsserializerbundle,Jms Serializer,我已将php.ini文件中的时区设置为UTC,但在我的应用程序中,我有欧洲/华沙 问题是:如何将第二个时区传递给JMS以将其用于序列化\DateTime对象? 我试过这样的方法: date_default_timezone_set($timezone); //Europe/Warsaw $serializer = $this->get('jms_serializer'); $data = $serializer->serialize($
php.ini
文件中的时区设置为UTC
,但在我的应用程序中,我有欧洲/华沙
问题是:如何将第二个时区传递给JMS以将其用于序列化\DateTime
对象?
我试过这样的方法:
date_default_timezone_set($timezone); //Europe/Warsaw
$serializer = $this->get('jms_serializer');
$data = $serializer->serialize($shift, 'json');
created_at:"2017-03-23T09:21:45+0000"
date:"2017-03-24T00:00:00+0000"
但首先,似乎JMS
正在php.ini
文件中查找时区,因为它以如下格式返回\DateTime
对象:
date_default_timezone_set($timezone); //Europe/Warsaw
$serializer = $this->get('jms_serializer');
$data = $serializer->serialize($shift, 'json');
created_at:"2017-03-23T09:21:45+0000"
date:"2017-03-24T00:00:00+0000"
创建自定义访问器
您可以在getter中指定不同的时区,并使用setter将其转换回UTC 我在
SerializerBuilder::create()
这是DateHandler
的默认签名:
public function __construct($defaultFormat = \DateTime::ISO8601, $defaultTimezone = 'UTC', $xmlCData = true)
因此,无论php.ini上设置了什么,它都默认使用UTC。我的时区是动态的,我将它存储在数据库中。如何存储时区?我也有类似的问题,时区在另一个实体中,因此我简单地保留了对该实体的引用。在向后端发送数据时,尝试始终指定正确的时区,然后将其转换为UTC并以UTC格式保存在DB中可能会有所帮助。检索数据时,JMSSerializer将以UTC为单位为您提供正确的日期时间,然后在应用程序中将日期时间从UTC转换为用户的时区,以便显示。