PHP输出本地时区调整的日期时间

PHP输出本地时区调整的日期时间,php,timezone,Php,Timezone,我的印象是PHP DateTime类的format()函数导出了最初传递的时间戳,并应用了正确的偏移量 我逐渐意识到它这样做是没有意义的。因此,我希望将来自数据库(UTC)的时间戳与用户的时区一起存储在对象中,并能够根据我想要的是UTC日期还是用户时区调整日期来输出它 我已经开始扩展DateTime类来实现这一点,但是我想知道DateTime中现有的方法或者DateTime类为什么会这样工作背后的思考过程是否遗漏了什么 大概我还需要两个静态工厂方法,它们可以获取时间戳、时区以及传入的时间戳是用户

我的印象是PHP DateTime类的format()函数导出了最初传递的时间戳,并应用了正确的偏移量

我逐渐意识到它这样做是没有意义的。因此,我希望将来自数据库(UTC)的时间戳与用户的时区一起存储在对象中,并能够根据我想要的是UTC日期还是用户时区调整日期来输出它

我已经开始扩展DateTime类来实现这一点,但是我想知道DateTime中现有的方法或者DateTime类为什么会这样工作背后的思考过程是否遗漏了什么

大概我还需要两个静态工厂方法,它们可以获取时间戳、时区以及传入的时间戳是用户调整的时间戳还是UTC时间戳,并且能够进行必要的调整,以从传入时间的UTC版本实例化标准化的DateTime对象。通过这种方式,我能够在UI和数据库周围抛出时间戳,并能够在它们之间进行适当的转换

有没有更简单的方法?我已经看到了date\u default\u timezone\u set函数,但我希望避免该设置影响整个脚本,导致用户调整的时间存储在数据库中


(我将用户的时区作为时区字符串存储在DB中,例如Europe/Berlin,以从用户会话变量传递到函数中。我还打算将所有日期时间存储为UTC时间,并将服务器的php.ini设置为UTC。)

您可以创建
日期时间
实例,指定它是UTC。然后将其时区更改为用户的时区


啊,这就是我一直缺少的。用起始时区初始化它,然后将它设置为使用结束时区。当然,它通常非常简单,但却是一个常见的问题。
$datetime = new DateTime("2011-06-07 12:34:56", new DateTimeZone("UTC"));
$datetime->setTimeZone(new DateTimeZone("Europe/Berlin"));
echo $datetime->format(DateTime::RSS);