我的印象是,php datetime类的format()函数导出了最初传递的时间戳,并应用了正确的偏移量。
我逐渐意识到这样做是没有意义的。因此,我希望将数据库中的时间戳(UTC)与用户的时区一起存储在对象中,并能够根据需要的是UTC日期还是用户时区调整日期输出它。
我已经开始扩展DateTime类来完成这项工作,但我想知道我是否在DateTime中的现有方法或DateTime类工作方式背后的思想过程中遗漏了一些东西。
大概我还需要两个静态工厂方法,它们可以获取时间戳、时区以及传入的时间戳是用户调整的时间戳还是UTC时间戳,并且能够进行必要的调整以从UTC版本的时光流逝。通过这种方式,我可以在ui和数据库周围抛出时间戳,并能够在它们之间进行适当的转换。
有更简单的方法吗?我已经看到了date_default_timezone_set函数,但我希望避免该设置影响整个脚本,从而导致用户调整的时间存储在数据库中。
(我将用户的时区存储在db中作为时区字符串,例如europe/berlin,以便从用户会话变量传递到函数中。我还打算将所有日期时间存储为UTC时间,并将服务器的php.ini设置为UTC。)

最佳答案

您可以创建DateTime实例,指定它是utc。然后将其时区更改为setTimeZone()用户的时区。

$datetime = new DateTime("2011-06-07 12:34:56", new DateTimeZone("UTC"));
$datetime->setTimeZone(new DateTimeZone("Europe/Berlin"));
echo $datetime->format(DateTime::RSS);

10-05 20:46
查看更多