1

我有一个将 GMT 时间数据存储在 MySQL 数据库中的应用程序,如下所示:2009-12-16 15:27:47。

用户的时区偏移量存储在另一列中,如下所示:-6

上述时区为 GMT-6,即 CST。有什么办法可以从 GMT 偏移数据中回显 CST(即 - date('T"))?

注意:我还应该补充一点,应用程序全局时区设置使用: date_default_timezone_set('GMT');

4

1 回答 1

2

不幸的是,每个 GMT 偏移量并不总是有一个时区。许多 GMT 偏移量有多个时区。此外,GMT 偏移量在 DST 期间发生变化(如适用)。例如,在 DST 期间,US/Arizona 和 US/Mountain 共享相同的 GMT 偏移量;但是,在今年余下的时间里,US/Mountain不要US/Arizona共享相同的 GMT 偏移量。您可以使用DateTimeZone::listIdentifiers()查看手册以获取 PHP 中支持的时区列表。

如果您从头开始应用程序,我建议您存储时区标识符而不是 GMT 偏移量,但我猜您的应用程序已经投入生产。在这种情况下,在不改进数据的情况下显示时区并没有真正可靠的方法。

我建议您在表格中添加一timezone列。您可以编写一个一次性脚本,timezone根据 GMT 偏移量将其设置为一些预定义的默认值列表。例如,如果 GMT 偏移量为 8,则将其设置timezoneAmerica/Los_Angeles. 最后,更改您的应用程序以显示/保存时区标识符而不是 GMT 偏移量。这可能会给您的一部分用户带来问题,但它允许他们在需要时更改时区。

于 2009-12-17T19:04:25.517 回答