我有一个将 GMT 时间数据存储在 MySQL 数据库中的应用程序,如下所示:2009-12-16 15:27:47。
用户的时区偏移量存储在另一列中,如下所示:-6
上述时区为 GMT-6,即 CST。有什么办法可以从 GMT 偏移数据中回显 CST(即 - date('T"))?
注意:我还应该补充一点,应用程序全局时区设置使用: date_default_timezone_set('GMT');
不幸的是,每个 GMT 偏移量并不总是有一个时区。许多 GMT 偏移量有多个时区。此外,GMT 偏移量在 DST 期间发生变化(如适用)。例如,在 DST 期间,US/Arizona 和 US/Mountain 共享相同的 GMT 偏移量;但是,在今年余下的时间里,US/Mountain
不要US/Arizona
共享相同的 GMT 偏移量。您可以使用DateTimeZone::listIdentifiers()
或查看手册以获取 PHP 中支持的时区列表。
如果您从头开始应用程序,我建议您存储时区标识符而不是 GMT 偏移量,但我猜您的应用程序已经投入生产。在这种情况下,在不改进数据的情况下显示时区并没有真正可靠的方法。
我建议您在表格中添加一timezone
列。您可以编写一个一次性脚本,timezone
根据 GMT 偏移量将其设置为一些预定义的默认值列表。例如,如果 GMT 偏移量为 8,则将其设置timezone
为America/Los_Angeles
. 最后,更改您的应用程序以显示/保存时区标识符而不是 GMT 偏移量。这可能会给您的一部分用户带来问题,但它允许他们在需要时更改时区。