【发布时间】:2011-06-07 12:29:01
【问题描述】:
我的印象是 PHP DateTime 类的 format() 函数导出了它最初传递的时间戳,并应用了正确的偏移量。
我开始意识到这样做是没有意义的。因此,我想将数据库中的时间戳 (UTC) 与用户的时区一起存储在对象中,并能够根据我想要 UTC 日期还是用户时区调整日期来输出它。
我已经开始扩展 DateTime 类来执行此操作,但我想知道我是否在 DateTime 中的现有方法或 DateTime 类以它的方式工作背后的思考过程中遗漏了什么。
大概我还需要几个静态工厂方法,它们可以获取时间戳、时区以及传入的时间戳是用户调整的时间戳还是 UTC 时间戳,并且能够进行必要的调整以实例化标准化来自传入时间的 UTC 版本的 DateTime 对象。通过这种方式,我可以在 UI 和数据库周围放置时间戳,并能够在它们之间进行适当的转换。
有没有更简单的方法?我见过 date_default_timezone_set 函数,但我想避免该设置影响整个脚本,导致用户调整的时间存储在数据库中。
(我将用户的时区作为时区字符串存储在数据库中,例如 Europe/Berlin,以便从用户会话变量传递给函数。我还打算将所有日期时间存储为 UTC 时间和将服务器的 php.ini 也设置为 UTC。)
【问题讨论】: