我有一个MySQL数据库这样的存储GMT时间数据的应用程序:2009-12-16 15点27分47秒。
用户的时区偏移存储在像这样的另一列:-6
上述时区为GMT-6,其为CST。 有什么办法,我可以附和CST(即 - 日期(“T”))从格林尼治标准时间偏移数据?
注:我还要补充一点,应用全球时区使用设置:date_default_timezone_set(“GMT”);
我有一个MySQL数据库这样的存储GMT时间数据的应用程序:2009-12-16 15点27分47秒。
用户的时区偏移存储在像这样的另一列:-6
上述时区为GMT-6,其为CST。 有什么办法,我可以附和CST(即 - 日期(“T”))从格林尼治标准时间偏移数据?
注:我还要补充一点,应用全球时区使用设置:date_default_timezone_set(“GMT”);
不幸的是,并非总是对每个GMT偏移一个时区。 许多GMT偏移位置上有多个时区。 另外,GMT偏移夏令时的变化(如适用)。 例如,DST期间,美国/亚利桑那州和美国/山共享相同的GMT偏移; 然而,在今年的剩余时间内, US/Mountain
和US/Arizona
不共享相同的GMT偏移。 您可以使用DateTimeZone::listIdentifiers()
或检查手册中PHP支持的时区列表。
如果你是从头开始的应用程序,我建议存储时区标识符,而不是GMT偏移,但我猜你的应用程序已经在生产中。 在这种情况下,有没有真的没有提高你的数据显示时区的可靠方法。
我建议你添加一个timezone
列于表。 你可以写一个一次性的脚本,将所设置的timezone
以基础上,格林尼治标准时间偏移默认的一些预先定义的列表。 举例来说,如果GMT偏移量是8,设置timezone
到America/Los_Angeles
。 最后,改变你的应用程序中显示/保存时区标识符,而不是GMT偏移。 这可能会导致为您的用户的一个子集的问题,但它允许他们,如果他们需要改变他们的时区。