Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony JMSSerializer-如何将时区传递给序列化_Symfony_Jmsserializerbundle_Jms Serializer - Fatal编程技术网

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转换为用户的时区,以便显示。